Foro sobre Java SE > Mantener socket abierto en TCP
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!!
Prueba a realizar un output.flush() después de la escritura .
Lo probé sin éxito ;-)
Gracias Garca!
Pues si que es raro, ¿nos podrías contar con más detalle lo que pasa?
Por lo que he entendido, cuando no cierras el socket (emisor supongo), ves con el sniffer que los datos llegan al socket receptor, pero la aplicación no tiene conocimiento de esos datos, no?
Prueba, aunque te parezca una tontería, de usar BufferedReader en lugar de DataInputStream y dinos que tal te fue!
Asi es, robertiano.
Lo probare, jordibr7.
Gracias, saludos!
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!!!