Sin embargo, tan pronto como trato de conectarme a otra computadora a través de Internet, simplemente desconecta la conexión del socket. ¿Esto se debe a cortafuegos/enrutadores, etc.?
Sí, muy probablemente. Se está ejecutando el problema NAT: esencialmente, la misma dirección IP visible externamente se asigna a muchos puntos finales internamente visibles, y el punto extremo externo no sabe a qué punto extremo interno dar su solicitud de socket.
La forma más fácil de solucionar esto es a haga que sus clientes se conecten a un tercero que ambos puedan ver, y luego haga que el tercero medie la comunicación. Así es como funcionan la mayoría de los protocolos de mensajería instantánea, por ejemplo.
Si no tiene forma de controlar una entidad de terceros como esa, una alternativa para conectar directamente dos clientes es hacer que ambos clientes abran un puerto acordado y luego asignar las comunicaciones en ese puerto a su propio interno punto final Esto proporciona el enlace que falta para que el punto extremo externamente visible (por ejemplo, su enrutador doméstico) necesite entregar la comunicación a su destino previsto.
Sí, pero me temo que no tengo un tercero ... – Jake
@Jake: Sospeché que podría ser el caso - ver mi último párrafo. Básicamente, haga que su programa de chat use algún puerto arbitrario (si es IPv4, elija un número por encima de 1024, porque están reservados) y exija que ambos clientes tengan este puerto abierto en sus enrutadores. –
@JohnFeminella Hola John, ¿me puedes dar un ejemplo o guiarme sobre cómo puedo escribir este módulo de "terceros" al que los clientes se pueden conectar? – asloob