Estaba equivocado chuidiang. Y bravo por ti porque habías dado en el clavo.
No estaba depurando bien el código y efectivamente la ejecución se queda en el while:
Código:
while ((numBytes=in.read(buffer)) != -1) {
Cada vez que lanzo un mensaje desde el cliente, este bucle hace una iteración, pero como nunca devuelve -1, se queda ahí.
Me estoy planteando aumentar el buffer para no necesitar el bucle (aunque no me gusta mucho esta solución (no se si podrían llegar mensajes muy grandes...) ¿Podría hacer alguna otra cosa?
Gracias chuidiang por tu ayuda!