Generalmente las funciones para leer del socket, se bloquean hasta que hay datos que leer. Revisa la referencia de las
APIs de java.
Cita: ...
This method blocks until input data is available, the end of the stream is detected, or an exception is thrown.
...
Tendrias que crear un hilo para que sea el que este leyendo. Si se bloquea no importaria ya que se estaria ejecutando aparte de la aplicacion principal. Cuando el hilo reciba datos, podrias cambiar alguna variable o mandar llamar una funcion de la aplicacion principal para que procese los datos recibidos