Ver Mensaje Individual
  #4 (permalink)  
Antiguo 11/10/2011, 09:03
josuth
 
Fecha de Ingreso: noviembre-2005
Mensajes: 17
Antigüedad: 18 años, 5 meses
Puntos: 0
Respuesta: Mantener socket abierto en TCP

Gracias por las respuestas.

Yo pienso que el problema puede ser el que apuntas chuidiang, que el receptor espera un retorno de carro (un EOF, o lo que sea) y por eso no devuelve el mensaje.

Pienso que puede ser un tema del S.O. (Win7) porque como digo el mensaje llega al PC destino, pero serverSocket.accept(), no devuleve nada...

No he tocado a penas nada del código, no puedo mostrar más de esto, espero que sea suficiente:

Escritura
Código:
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
Código:
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!