socket - ¿Cómo se obtienen los conectores Java que funcionan con IP públicas?
sockets java multiples clientes (2)
Le pregunté sobre el netstat solo para ver si tal vez estaba escuchando en 127.0.0.1, pero no estoy familiarizado con lo que muestra su sistema operativo.
Asumiendo que no estás escuchando accidentalmente en localhost: con los enrutadores, generalmente tienes que reenviar a una dirección específica. Al menos, con los enrutadores que tuve, eso es lo que tenía que hacer. suponiendo que no está escuchando localhost, entonces el enrutador necesita reenviar a una IP que ifconfig muestra.
No he tenido problemas para hacer que los sockets funcionen con localips, pero una vez que hice que el código cambiara para usar ips públicos, siempre recibí java.net.ConnectException.
Estoy usando el puerto 8084, que hasta donde yo sé, no se usa en otro lugar En el símbolo del sistema, netstat -a | grep 8084 muestra: Archivo STDIN: usuario TCP-9114eb19a8: 8084 usuario-9114eb19a8: 0 ESCUCHA
He entrado en mi enrutador y me he asegurado de que esté abierto obtengo mi IP pública mediante una solicitud a http://www.whatismyip.org
Servidor:
serverSocket = new ServerSocket (8084);
Cliente:
socket = new Socket (hostaddr, 8084); //hostaddr is a string containing my public-IP
//it works when the program is run on a localnetwork and I am using my local-ips
¿Qué tipo de enrutador? No olvide que aunque haya un puerto abierto en su enrutador, debe tener su enrutador Puerto de reenvío 8084 a la IP interna de la computadora de destino; de lo contrario, debido a la Traducción de direcciones de red (NAT), el enrutador / firewall no sabe qué para hacer con el tráfico una vez que llega allí.
Por ejemplo, supongamos que su PC cliente está en California con la IP 10.1.1.100, con un enrutador que usa una IP pública de 70.62.50.42.
Su Servidor PC está en Nueva York con una IP 192.168.1.121, que está detrás de un enrutador con IP interna 192.168.1.1 e IP pública 40.20.26.63. Deberá asegurarse de ingresar al enrutador y reenviar el puerto 8084 (TCP) a la dirección interna 192.168.1.121 (la PC del servidor interno).
Dependiendo del nivel de su enrutador, esta terminología será Port Forwarding, Virtual IPs o Static NAT Translation (hay algunos otros pero se entiende la idea).
No tendrá que ajustar ninguna configuración en el enrutador del Cliente, ya que ese enrutador ya sabe cómo enrutar su solicitud a Internet.