Foro de elhacker.net

Programación => Java => Mensaje iniciado por: BlaineMonkey en 4 Mayo 2010, 14:40 pm



Título: Indicar puerto local Cliente Sockets TCP
Publicado por: BlaineMonkey en 4 Mayo 2010, 14:40 pm
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.


Título: Re: Indicar puerto local Cliente Sockets TCP
Publicado por: Axtrall en 4 Mayo 2010, 15:09 pm
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!


Título: Re: Indicar puerto local Cliente Sockets TCP
Publicado por: BlaineMonkey en 4 Mayo 2010, 16:12 pm
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?


Título: Re: Indicar puerto local Cliente Sockets TCP
Publicado por: BlaineMonkey en 4 Mayo 2010, 17:30 pm
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?