Problema con Flujos por internet

He estado haciendo un pequeño protocolo de comunicación para una aplicación que tengo planeada, básicamente el protocolo consiste en que el cliente hace una petición conformada por atributos(Nombre y Valor) separados por un "\n", cuando la petición es terminada, se le agrega otro "\n", y el servidor responde de manera análoga, ejemplo:
El cliente haría esta petición:
GET /home/xmbeat/archivo.txt
BYTE-POS 10

__________________________
El servidor respondería así:
XmServer/1.0 GOOD
CONTENT-LENGTH 400
FILE-LENGTH 410

[DATOS BINARIOS DE LONGITUD 400]

Como aprecian es parecido al protocolo http, pero no logro hacerlo funcionar, el programa funciona de esta manera: el servidor se pone a la escucha y por cada cliente que se conecte, crea un hilo que atienda sus peticiones hasta que el cliente decida desconectarse (esto es así para cada hilo), todo marcha bien pero en mi caso, siempre llegan los meta-datos, pero no siempre los datos binarios. En ocasiones hace lo que le digo, pero otras veces se queda esperando el paquete que nunca llega, aun cuando hago flush(), close(), pero nada!
Adjunto el proyecto:
para compilarlo, ubicarse en la carpeta "src/" y desde el prompt ejecutar:
javac -d ../bin/ com/xmserver/componentes/*.java
javac -d ../bin/ com/xmserver/gui/*.java

Para ejecutar el server:
java -cp ../bin/ com.xmserver.gui.Main

Para ejecutar el cliente en otra shell usar:
java -cp ../bin/ com.xmserver.componentes.XmClientSession

Comentarios:
-Desbloquear el puerto 10500
-A mi en lo personal, el cliente funciona solo 2 veces, al 3er intento, se queda esperando un paquete que nunca es enviado, no sé porque, a pesar de que es un hilo aparte.

Ojalá hayan leído mi problema y puedan ayudarme, gracias!