Java - Socket no funciona fuera de mi red.

 
Vista:

Socket no funciona fuera de mi red.

Publicado por Jordi (135 intervenciones) el 10/10/2017 23:34:25
He echo un programilla que crea en dos hilos diferentes un ServerSocket y un Socket, por un hilo representa que se lee lo que llega por la conexión creada y al mismo tiempo el otro hilo puede enviar datos a otro socket. Osea, que el objetivo de ese programa es conectar dos ordenadores que lo tengan abierto y poder enviar mensajes de uno a otro. La cosa es que como solo tengo mi ordenador, para ver si funcionaba he tenido que llamar a un amigo y no nos hemos podido conectar. Para conectar un socket con el otro tengo entendido que poniendo la IP ya basta (así lo pintan en todos lados), así que el socket lo que hace para conectarse es:
1
Socket socket = new Socket(ip, puerto);
a partir de ahí meto en un buffer el inputstream del socket y escribo... Esta parte del programa no ha llegado ni a ejecutarse ya que el socket no se conectaba. La parte del servidor viene a ser parecida, creo un serversocket, y un socket del que saco un outputstream metiéndolo en un buffer para leer lo que llega. Osea, esto:
1
2
3
ServerSocket serverSocket = new ServerSocket(portNumber);
Socket clientSocket = serverSocket.accept();
br = new BufferedReader(clientSocket.getOutputStream());//Algo parecido
Hay alguna forma de hacer lo que quiero? Tengo entendido que para fuera de la red local las compañías de Internet nos dan una IP pública, tengo que hacer uso de esta para que los dos programas se comuniquen sin problemas?
Gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Socket no funciona fuera de mi red.

Publicado por Jordi (135 intervenciones) el 11/10/2017 12:56:51
Me estoy tilteando muchíssimo, internet está lleno a más no poder de como crear un servidor local con sockets, pero para hacerlo WAN se les va la olla, que si hay que empezar a tocar no se que del router... No puede ser, yo he usado algún prorgama de Java que se conectaba a un servidor o ordenador en orta parte del mundo y no tuve que tocar el router para nada... Como digo en el tema quiero conectar dos ordenadores de distintas partes de mi ciudad aunque sea para que se puedan intercanviar mensajes, creo que los sockets no sirven para hacer esto por lo que parece. Solo puedo indicarle la ip publica y luego a ver como hacerlo con lo de los puertos que al parecer están cerrados... Alguien tiene aunque sea algún artículo que hable sobre esto? Ya he leído mil veces sobre como hacer un servidor local, con hilos, sin hilos, solo de entrada, de entrada y salida, de todos los colores y sabores. Pero tooooodos ellos para una misma red, supongo que para hacer una base de datos en una empresa y tal, pero para WAN nadie habla de ello y la gente que lo hace simplemente dice: Si pasas la IP pública al socket luego como hace el router para saber a que equipo enviar la información? Y los puertos? Pero nadie da una solución o al menos algún sitio en el que informarse.
Alguien de buena fe que pueda ayudarme? Me esta destrozando los nervios este prorgamilla :(
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Socket no funciona fuera de mi red.

Publicado por Tom (1831 intervenciones) el 12/10/2017 19:42:54
He leído un poco por encima tu problema, no tengo mucho tiempo últimamente.
Lo primero como dices es lo de la IP ... bueno la IP es una dirección de una máquina en concreto, pero tú ya ves que además usas el número de puerto. Las dos cosas juntas son las que usas para abrir un socket TCP/IP.
No necesitas, entonces, otra máquina para probar, simplemente usa la IP de tu máquina en tu red local (o la 127.0.0.1), y números de port distintos para los distintos sockets.
Por otra parte, lee un poco sobre el enrutamiento en Internet. Nuestras redes "domésticas" "salen" a Internet a través de equipamiento de la compañía proveedora de servicios (digamos, por ejemplo, Telefónica).
Si tu direccion IP de tu red local es, por decir alguna, la 192.168.1.191, es seguro que habrá millones de PCs conectados a la internet que tengan asignada esa misma IP en su red local.
Cuando intentas conectarte a Internet el router de tu casa va a recibir desde un "programita" que se llama DHCP server una dirección pública (no lo he dicho, pero esa 192.168.... es "privada") que es única (o eso se pretende) en Internet.

Para conectarte con tu amigo, si el es el "server" (el que escucha lkas peticiones de conexión) has de hacerlo conociendo su IP pública, la que permite que los datos circulen por Internet (en lugar de limitarse a circular por tu red local). Si tu amigo quiere establecer una conexión contigo, también debe usar tu IP pública.
Por otra parte, muchos routers de los que dan las compañías vienen por defecto con "firewalls" instalados y preconfigurados. Básicamente no dejan que entren peticiones de conexión a determinados puertos, por seguridad.
Así que es posible que si intentas conectarte al puerto 10000 de la IP de tu amigo (pública) él debe asegurarse de que en su router tiene permitido el acceso por ese puerto.

http://es.tldp.org/Manuales-LuCAS/GARL2/garl2/x-087-2-issues.ip-addresses.html
https://www.aboutespanol.com/diferencia-entre-ip-publica-e-ip-privada-3507894

Ah! además, si tu proveedor es Masmovil por ejemplo, probablemente estés bajo una especie de manta llamada CGNAT (busca en google Carrier Grade NAT) que impide que otros equipos externos a tu red local soliciten una conexión al tuyo (o sea que desde Internet nadie se puede conectar a tu PC -ojo, cosa distinta es que tú te conectes a otro, que sí que podrás a no ser que esté también bajo gcnat-)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar