On your server side class when the clients socket is created/connected you can call setSOTimeout(timeout in milliseconds) on the clients socket.
When you call the read method on that socket's InputStream if no data is read/received with in that SO Timeout then the
read method for that stream will throw a SocketTimeoutException , but the Socket is not closed.
If you catch that exception then you can do something such as close that client's connection.
The Java API reads....
Enable/disable SO_TIMEOUT with the specified timeout, in milliseconds. With this option set to a non-zero timeout, a read() call on the InputStream associated with this Socket will block for only this amount of time. If the timeout expires, a java.net.SocketTimeoutException is raised, though the Socket is still valid. The option must be enabled prior to entering the blocking operation to have effect. The timeout must be > 0. A timeout of zero is interpreted as an infinite timeout.