Java - Mantener abierto socket TCP

 
Vista:

Mantener abierto socket TCP

Publicado por jath (2 intervenciones) el 11/10/2011 12:38:37
Hola a todos!

A ver si me podeis echar una mano, porque no encuentro la solución por ningún sitio.

Tengo una aplicación cuyo objetivo es desplegar en dos nodos y que estos nodos se comuniquen vía TCP. Me piden como requisito que el socket TCP que envía NO se cierre, pero me estoy encontrando con que si no cierro el socket en el emisor, el receptor no lo recibe.

Con un sniffer he comprobado que el mensaje llega al destino, pero por alguna razón el socket no devuelve el mensaje a mi aplicación.

Trabajo con ServerSocket y Socket. Lamentablemente, no puedo pegaros el código, pero no creo que haga falta, mi duda es conceptual ¿es obligatorio cerrar el socket en el emisor para que el receptor reciba el mensaje?

Saludos y gracias!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Mantener abierto socket TCP

Publicado por jath (2 intervenciones) el 11/10/2011 17:09:17
Venga, algo de código, a ver si alguien me puede guiar un poco

Escritura:

if (socket == null || socket.isClosed()) {
socket = new Socket(ip, port);
socket.setKeepAlive(mantenerSocket);
output = new DataOutputStream(socket.getOutputStream());
}
XXXDatagram datagram = new XXXDatagram(sourceCountry, sourceSystem, sourceSubsystem);
datagram.setCompression(encoding);
datagram.setPriority(priority);
byte[] bytes = datagram.encodeDatagram(message, destinationCountry, destinationSystem, destinationSubsystem);
output.write(bytes);


Lectura:

Socket clientSocket = null;
DataInputStream in = null;
clientSocket = serverSocket.accept();
clientSocket.setKeepAlive(mantenerSocket);
in = new DataInputStream(clientSocket.getInputStream());
byte[] buffer = new byte[bufferSize];
byte[] datagram = new byte[bufferSize];
int numBytes = 0;
int length = 0;
while ((numBytes=in.read(buffer)) != -1) {
System.arraycopy(buffer, 0, datagram, length, numBytes);
length += numBytes;
}
newDatagram(datagram);

Gracias!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Mantener abierto socket TCP

Publicado por Tom (1831 intervenciones) el 13/10/2011 10:01:10
No, no es necesario cerrar el socket. Seguramente debes hacer flush() al stream tras escribir.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar