La cuestion es que el Thread que esta parado leyendo del socket y el Thread que lanza el evento de que te han pulsado el boton son dos threads diferentes y por eso no se bloquean el uno al otro.
Puedes ver un ejemplo escrito por Chuidiang aquí:
http://www.chuidiang.com/java/socket...et_hilos_2.php