Buenas,
Has abierto el puerto en el router?
Para que haya conexión necesitas poder llegar hasta el ordenador:
Cliente <-> Internet <-> ( Router <-> Servidor )
Los paréntesis indican una red LAN (es decir, una red privada desde la que no se tiene acceso desde internet)
La IP a la que debes llamar es la IP del router (la IP pública). Cuando la petición de conexión llega al router, éste, tiene que saber que hacer:
- Si no tiene ninguna regla, desestima la petición (la cancela)
- Si tiene una regla, la aplica
Las reglas suelen ser de este tipo (de forma lógica):
Si recibes una petición en le puerto P, la reenvías a la IP de la LAN I y al puerto X
Crear reglas de este estilo es lo que se conoce como "abrir puertos" en un ruter.
Luego, el servidor I tiene que tener un programa (imagino, el que estas haciendo) abierto en el puerto X para aceptar la conexión.
Más información:
-
NAT (Concretamente, DNAT)
-
Abrir puertos (Busca un tutorial para tu router si no sabes hacerlo)
P.D.: Cuando dices que pones tu IP externa, espero que no estés probando de llamar a tu programa con la IP externa de tu router estando tú dentro de la red LAN (eso es una tontería y los routers no saben como redireccionar estas peticiones)... Como mucho, prueba a poner la IP de tu ordenador (no solo la IP de localhost), pon ifconfig en linux o ipconfig en windows para saberla
Carlos