Indicar puerto local Cliente Sockets TCP

Iniciado por BlaineMonkey, 4 Mayo 2010, 14:40 PM

0 Miembros y 1 Visitante están viendo este tema.

BlaineMonkey

tengo un cliente de Sockets TCP. Me gustaría saber si hay alguna forma de indicarle el puerto por el que debe escuchar. Pregunto esto porque cuando se corta la conexión con el servidor TCP mi cliente cierra el socket y lo vuelve a abrir, pero al hacer esto, el nuevo socket tiene otro puerto local, y el servidor sigue enviando las respuestas al puerto del socket anterior.

No tengo posibilidad de tocar los fuentes en la parte servidora, por lo que quiero saber si hay alguna forma de indicar al crear el socket del cliente su puerto local.

Axtrall

Realmente seria el cliente el que se deberia volver a conectar al servidor con el nuevo puerto (da igual cual), pues es el server el que mantiene un puerto asignado y no lo cambia.

Saludos!
La felicidad es siempre un objetivo, no un estado.

BlaineMonkey

Si conectar ya conecto con el nuevo puerto, pero no me llega nada del servidor. He puesto un analizador de redes y veo que aunque estoy conectado con otro puerto el servidor manda los mensajes al puerto anterior.

¿Qué otra cosa puedo hacer?

BlaineMonkey

Creo que no va a ser necesario conectar de nuevo. He visto que el problema está en el cliente.

He puesto un analizador de redes, y he visto que si saco de la red la máquina que tiene el servidor TCP, el cliente pasado un rato deja de mandar por red los mensajes. Saco trazas del estado del Socket y en todo momento pone que está conectado (isConnected() es true) y que no está cerrado isClosed() es false.

El socket lo inicializo de la siguiente forma:

            echoSocket = new Socket(address, port);
            echoSocket.setKeepAlive(true);
            System.out.println("PUERTO:" + echoSocket.getLocalPort());
           
             out = new PrintWriter(echoSocket.getOutputStream());
             in = new BufferedReader(new InputStreamReader(
                                        echoSocket.getInputStream()));

Para mandar mensajes ejecuto los métodos:

out.write(mensaje);
out.flush(); //para que lo escriba

Como he comentado antes, tengo el analizador de redes y veo que pasado un tiempo ya no captura más trazas del cliente hacia el servidor y sin embargo se siguen ejecutando los métodos out.write y out.flush

¿Qué está pasando? ¿Cómo puedo solucionarlo?