Tengo el siguiente problema. El programa de mi cliente supervisa la disponibilidad del servidor en la red local (usando Bonjour, pero no funciona). Tan pronto como un servidor es "notado" por la aplicación cliente, el cliente intenta crear un socket: Socket(serverIP,serverPort);
.¿Debo cerrar los enchufes de ambos extremos?
En algún momento el cliente puede perder el servidor (Bonjour dice que el servidor ya no está visible en la red). Entonces, el cliente decide close
el socket, porque ya no es válido.
En algún momento, el servidor vuelve a aparecer. Entonces, el cliente intenta crear un nuevo socket asociado con este servidor. ¡Pero! El servidor puede negarse a crear este socket ya que (el servidor) ya tiene un socket asociado con el IP del cliente y el puerto del cliente. Sucede porque el socket fue cerrado por el cliente, no por el servidor. ¿Puede pasar? Y si es el caso, ¿cómo se puede resolver este problema?
Bueno, entiendo que es poco probable que el cliente intente conectarse al servidor desde el mismo puerto (puerto cliente), ya que el cliente selecciona sus puertos al azar. Pero aún puede suceder (por casualidad). ¿Derecha?
'Si el diseño de la aplicación para utilizar un puerto local diferente para cada nueva conexión' Como eso es lo que sucede automáticamente, no hay necesidad de diseñar para él. Solo evite especificar puertos locales completamente al construir Sockets. – EJP
Oh, sí, lo que quise decir es que uno no debe diseñar una aplicación para depender de qué puerto proviene una solicitud. – KarlP