Client Supported Commands Server Reaction and response Add: x where x can be any integer value (e.g., Add: 74) 1- Add x to the inputValues list 2- Respond with “added successfully” Remove: x where x can be any integer value (e.g., Remove: 2) 1- Remove all occurrences x from the inputValues list 2- Respond with “removed successfully” Get_Summation 1- Calculate the summation of values in the inputValues list 2- Respond with “The summation is x” where x is the summation of all values in the list. If empty list or all elements are zeros, x in the message equals null Get_Minimum 1- Search for the minimum number in the inputValues list 2- Respond with “The minimum is x” where x is the minimum value in the list. If empty list or all elements are zeros, x in the message equals null Get_Maximum 1- Search for the maximum number in the inputValues list 2- Respond with “The maximum is x” where x is the maximum value in the list. If empty list or all elements are zeros, x in the message equal's null.
Answer
//Server java file
import java.io.*;
import java.net.*;
import
java.util.ArrayList ;
import
java.util.Collections;
class Server {
public static void
main(String args[]) {
ArrayList<Integer>
list = new ArrayList<Integer>();
try {
/*
Create server Socket
that listens/bonds to port/endpoint address 6666 (any port id of your choice,
should be >=1024,
as other port addresses
are reserved for system use)
The default maximum number
of queued incoming connections is 50 (the maximum number of clients to connect
to this server)
There is another
constructor that can be used to specify the maximum number of connections */
ServerSocket
mySocket = new ServerSocket(6666);
System.out.println("Startup
the server side over port 6666 ....");
// use the created
ServerSocket and accept() to start listening for incoming client requests
targeting this server and this port
// accept() blocks the
current thread (server application) waiting until a connection is requested by
a client.
// the created
connection with a client is represented by the returned Socket object.
Socket
connectedClient = mySocket.accept();
// reaching
this point means that a client established a connection with your server and
this particular port.
System.out.println("Connection
established");
// to
interact (read incoming data / send data) with the connected client, we need to
create the following:
//
BufferReader object to read data coming from the client
BufferedReader
br = new BufferedReader(new
InputStreamReader(connectedClient.getInputStream()));
//
PrintStream object to send data to the connected client
PrintStream
ps = new PrintStream(connectedClient.getOutputStream());
// PrintWriter
out = new PrintWriter(connectedClient.getOutputStream(), true);
OutputStream
ostream = connectedClient.getOutputStream();
PrintWriter
out = new PrintWriter(ostream, true);
// Let's
keep reading data from the client, as long as the client does't send
"exit".
String
inputData;
int y = 0;
while
(!(inputData = br.readLine()).equals("exit")) {
out.flush();
//System.out.println("received
a message from client: " + inputData); //print the incoming
data from the client
if(
inputData.toLowerCase().contains("add") ){
int x =
Integer.parseInt(stripNonDigits(inputData) );
list.add(x);
out.println("added
successfully");
out.flush();
}
else if
(inputData.toLowerCase().contains("remove")){
list.remove(
Integer.valueOf(stripNonDigits(inputData) ) );
out.println("remove
successfully");
out.flush();
}
else if
(inputData.toLowerCase().equals("get_summation")){
if(sum(list)
!= 0)
out.println("The
summation is " + sum(list));
else
out.println("The
summation is null" );
out.flush();
}
else if
(inputData.toLowerCase().equals("get_minimum")){
if(sum(list)
!= 0){
out.println("The
minimum is " + minimum(list));
}else{
out.println("The
minimum is null" );
out.flush();
}
}
else if
(inputData.toLowerCase().equals("get_maximum")){
if(sum(list)
!= 0){
out.println("The
maximum is " + maximum(list));
out.flush();
}
else{
out.println("The
maximum is null" );
out.flush();
}
}else
if(!inputData.toLowerCase().equals("exit")){
out.println("Unsupported
command" );
out.flush();
}
out.flush();
//
ps.println("Here is an acknowledgement from the server"); //respond
back to the client
}
System.out.println("Closing
the connection and the sockets");
// close
the input/output streams and the created client/server sockets
ps.close();
out.close();
ostream.close();
br.close();
mySocket.close();
connectedClient.close();
} catch
(Exception exc) {
System.out.println("Error
:" + exc.toString());
}
}// end main
// return sum
public static int sum
(ArrayList<Integer> m ){
if ( m == null)
return
0 ;
int sum = 0;
for(int i = 0; i <
m.size(); i++)
sum
+= m.get(i);
return sum;
}
// return minimum
public static int
minimum (ArrayList<Integer> m ){
return
Collections.min(m);
}
// return maximum
public static int
maximum (ArrayList<Integer> m ){
return
Collections.max(m);
}
public static String
stripNonDigits(
final
CharSequence input /* inspired by seh's comment */){
final
StringBuilder sb = new StringBuilder(
input.length()
/* also inspired by seh's comment */);
for(int
i = 0; i < input.length(); i++){
final
char c = input.charAt(i);
if(c
> 47 && c < 58){
sb.append(c);
}
}
return
sb.toString();
}
}
/////====================================
//Client java file
import java.io.*;
import java.net.*;
import
java.util.Scanner;
class Client {
public static void
main(String args[]) {
try {
// Create
client socket to connect to certain server (Server IP, Port address)
// we use
either "localhost" or "127.0.0.1" if the server runs on the
same device as the client
Socket
mySocket = new Socket("127.0.0.1", 6666);
// to
interact (send data / read incoming data) with the server, we need to create
the following:
//DataOutputStream
object to send data through the socket
DataOutputStream
outStream = new DataOutputStream(mySocket.getOutputStream());
//
BufferReader object to read data coming from the server through the socket
BufferedReader
inStream = new BufferedReader(new
InputStreamReader(mySocket.getInputStream()));
// DataInputStream
inputStream=new DataInputStream( new
BufferedInputStream(mySocket.getInputStream()));
String
statement = "";
Scanner in
= new Scanner(System.in);
while(!statement.equals("exit"))
{
statement
= in.nextLine(); // read user input from the terminal
data to the server
outStream.writeBytes(statement+"\n");
// send such input data to the server
//writer.write(statement+"\n");
//
writer.flush();
if(!statement.equals("exit")){
String
str = inStream.readLine(); // receive response
from server
System.out.println(str);
//
print this response
}
}
System.out.println("Closing
the connection and the sockets");
// close
connection.
outStream.close();
inStream.close();
mySocket.close();
} catch
(Exception exc) {
System.out.println("Error
is : " + exc.toString());
}
}
}