Как вы получаете сокеты Java, работающие с публичными IP-адресами? - PullRequest
5 голосов
/ 09 февраля 2009

У меня не было проблем с настройкой сокетов, работающих с localips, но как только я изменил код для использования публичных ips, я последовательно получил java.net.ConnectException.

Я использую порт 8084, который, насколько я знаю, нигде не используется В командной строке netstat -a | grep 8084 показывает: Файл STDIN: TCP user-9114eb19a8: 8084 user-9114eb19a8: 0 СЛУШАТЬ

Я зашел в свой роутер и убедился, что он открыт Я получаю свой публичный IP-адрес по запросу http://www.whatismyip.org

Сервер:

serverSocket = new ServerSocket (8084);

Клиент:

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

Ответы [ 2 ]

12 голосов
/ 09 февраля 2009

Какой тип роутера? Не забывайте, что, хотя порт может быть открыт на вашем маршрутизаторе, вам необходимо иметь маршрутизатор Forward порт 8084 на внутренний IP-адрес компьютера назначения, в противном случае из-за преобразования сетевых адресов (NAT) маршрутизатор / брандмауэр не знает, что делать с трафиком, когда он туда попадает.

Например, скажем, ваш клиентский компьютер находится в Калифорнии с IP-адресом 10.1.1.100, а маршрутизатор использует публичный IP-адрес 70.62.50.42.

Ваш серверный компьютер находится в Нью-Йорке с IP 192.168.1.121, то есть за маршрутизатором с внутренним IP 192.168.1.1 и общедоступным IP 40.20.26.63. Вам необходимо убедиться, что вы зашли в маршрутизатор и перенаправили порт 8084 (TCP) на внутренний адрес 192.168.1.121 (внутренний сервер ПК).

В зависимости от уровня вашего маршрутизатора эта терминология будет «Переадресация портов», «Виртуальные IP-адреса» или «Статическая трансляция NAT» (есть несколько других, но вы поняли идею).

Вам не нужно будет настраивать какие-либо параметры на клиентском маршрутизаторе, поскольку этот маршрутизатор уже знает, как направить ваш запрос в Интернет.

0 голосов
/ 09 февраля 2009

Я спросил о netstat, чтобы посмотреть, возможно, вы слушали 127.0.0.1, но я не знаю, что показывает ваша ОС.

Предполагая, что вы случайно не прослушиваете локальный хост: с маршрутизаторами вам обычно приходится перенаправлять на определенный адрес. По крайней мере, с маршрутизаторами, которые у меня были, это то, что я должен был сделать. при условии, что вы не слушаете localhost, маршрутизатору необходимо перенаправить IP-адрес, который показывает ifconfig.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...