Reputation: 6271
I have to create a socket server which will listen to multiple client. Suppose there are 6 clients connected to the server at the same time and each of the clients are sending some commands to server at the same time. If these clients sending the message to server for every 1 second how can I handle the those messages from the 6 clients on the server side to store it in the table and the acknowledgement to each client.
How can i handle these input from from the client. Whether I have to create 6 threads to handle these inputs from the client.
Please give me a idea to approach this issue.
Upvotes: 2
Views: 5555
Reputation: 3190
Create a new thread per client connection and continually do a blocking read on the streams in each thread to look for data to process.
class Server {
ClientThread threads[];
int size;
ServerSocket serverSocket;
boolean active;
Server() throws Exception {
/* initialize connection */
active = true;
listen();
}
void listen() throws Exception {
while ( active ) {
Socket clientSocket = serverSocket.accept();
threads[ size++ ] = new ClientThread( clientSocket );
threads[ size - 1 ].start();
}
}
}
class ClientThread extends Thread {
OutputStream out;
InputStream in;
boolean active;
ClientThread( Socket clientSocket ) throws Exception {
out = clientSocket.getOutputStream();
in = clientSocket.getInputStream();
}
public void run() {
active = true;
while ( active ) {
listen();
}
}
private void listen() {
try {
int res = process( in.read() );
out.write( res );
} catch ( Exception e ) {}
}
private int process( int b ) {
return -1;
}
}
Upvotes: 3
Reputation: 118593
Any reason you can't use a servlet container to do this? This is 10 lines of code in a Servlet + Tomcat/Jetty.
Upvotes: 0