Java – Should I close the socket after every successful message handle

javasockets

I am writing a program that has a Java Server/Client socket. There will be many messages sent back and forth, and in some situations, sending a message to the server and waiting for a period of time until the server has sent back a "execute" message.

Here is what I have planned:

  • 1 Server (machine could possibly have antivirus security on it)
  • 3 Clients (with room for more clients in future)
  • Parallel and Interleaved synchronization being carried out on the server side based up the clients output to the server.
  • When all machines are ready (in sync), when parallel all clients will be sent an "execute" message, when interleave clients will be sent an "execute" command in sequential order 1 by 1

I have started to build the program to have this setup above, and once a message is received on the server, the servers performs actions based upon the input and then sends back a message to the client. I have had problems in the past where messages were not sent or received properly, so my question is:

  • Do I keep the socket alive until then end of my program?
  • Or do I keep the socket open only until a successful transmission (a full handshake) has taken place and then close the socket? Leaving the client to connect again next time it wants to send a message.

Best Answer

You should certainly keep TCP connections open for as long as possible, but be prepared to create a new one on failure. You will need to use read timeouts at both ends to detect those.

Related Topic