los datos enviados por firefox tcp socket.send () no se pueden recuperar hasta cerrar el socket

Estoy tratando de enviar algunos datos de Firefox a la aplicación de escritorio de Java. Entonces mi clase de Java funciona como un servidor y el script de Firefox funciona como un cliente. Cuando lo pruebo usando otra clase de Java queclient.java datos enviados con éxito aserver.java Sin embargo, cuando uso este script de Firefox para enviar datos, en realidad se conecta al servidor. perosend("text"); no funciona en tiempo real. Quiero decir que el servidor muestra los datos recibidos cuando cierro el socketsocket.close(); . pero sé que no hay problema conserver.java código.

esto no funciona

setTimeout(function(){socket.send("i'm firefox");},5000); // because socket isn't closed yet

este trabajo

setTimeout(function(){socket.send("i'm firefox");},5000);
setTimeout(function(){socket.close();},6000); 

pero realmente no quiero cerrar el socket porque quiero enviar muchos datos uno por uno.

Aquí está el código completo probado en scratchpad [-browser]

var tcpSocket = Cc["@mozilla.org/tcp-socket;1"].createInstance(Ci.nsIDOMTCPSocket);
var socket = tcpSocket.open("127.0.0.1", 5000);

setTimeout(function(){socket.send("i'm firefox");},5000);
//setTimeout(function(){socket.close();},8000);// i'm firefox text retrieve by server when run this line / when close the socket.

Creo que el código Java no es importante. peroaquí es.

Me pregunto por qué necesito cerrar el socket para enviar datos. ¿Y cómo puedo enviar datos sin cerrar el socket?

actualizar

hice un gif Para mostrar mi problema aquí, puede ver que los datos no se envían en tiempo real, pero cuando el socket está cerrado, todos los datos se eliminan.

Respuestas a la pregunta(1)

Su respuesta a la pregunta