Task 2
Structure
- lib: .jar files downloaded from apache. the downloaded file is extracted and the contents of the
libdirectory copied in here. - out: output binaries in packages
serverandclient - src: source code in 2 packages
clientandserver
How to run
-
First we compile the code (in linux using the following command)
# the "lib/*" tells jvm to include these libraries javac -cp "lib/*" -d out $(find src -name "*.java") -
Then we start the server. again run the following command
java -cp "out:lib/*" server.Server -
And finaly we run the client as such
java -cp "out:lib/*" client.Client
Server commands:
// list of valid commands
private String[] commands = {
"add",
"subtract",
"multiply",
"divide",
"mod",
"power",
"root",
"exit"
};
inspecting packets using wireshark.
Normal functions
I installed wireshark-cli and run
sudo tshark -i lo -f "tcp port 8080" -z follow,tcp,ascii,0
In Client program the interaction looked like this
Enter an integer: 4
Enter an integer: 6
The sum is: 10
And the output of wireshark was as follows
POST /RPC2 HTTP/1.1
Content-Type: text/xml
User-Agent: Apache XML RPC 3.0 (Sun HTTP Transport)
Cache-Control: no-cache
Pragma: no-cache
Host: localhost:8080
Accept: */*
Connection: keep-alive
Content-Length: 195
<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>sample.sum</methodName>
<params>
<param>
<value><i4>4</i4></value>
</param>
<param>
<value><i4>6</i4></value>
</param>
</params>
</methodCall>
HTTP/1.1 200 OK
Server: Apache XML-RPC 1.0
Connection: close
Content-Type: text/xml
Content-Length: 129
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<params>
<param>
<value><i4>10</i4></value>
</param>
</params>
</methodResponse>
I believe this is the expected result.
Intentional error
I changed the messge call string to sample.add instead of the correct sample.sum and run the program. obviously it threw an exception. the http response from wireguard was as follows
POST /RPC2 HTTP/1.1
Content-Type: text/xml
User-Agent: Apache XML RPC 3.0 (Sun HTTP Transport)
Cache-Control: no-cache
Pragma: no-cache
Host: localhost:8080
Accept: */*
Connection: keep-alive
Content-Length: 196
<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>sample.add</methodName>
<params>
<param>
<value><i4>23</i4></value>
</param>
<param>
<value><i4>4</i4></value>
</param>
</params>
</methodCall>
HTTP/1.1 200 OK
Server: Apache XML-RPC 1.0
Connection: close
Content-Type: text/xml
Content-Length: 265
<?xml version="1.0" encoding="UTF-8"?>
<methodResponse>
<fault>
<value>
<struct>
<member>
<name>faultCode</name>
<value><i4>0</i4></value>
</member>
<member>
<name>faultString</name>
<value>No such handler: sample.add</value>
</member>
</struct>
</value>
</fault>
</methodResponse>
Again the expected results. I only tested it in one machine. so time will be done may be another time.