TCP-соединение Java с публичным IP - PullRequest
0 голосов
/ 04 декабря 2011

Я пытаюсь tcp подключиться к серверу в Java, используя его общедоступный i.p. но когда я запускаю клиентское приложение, я постоянно получаю сообщение об отказе в соединении. если я использовал localhost вместо публичного ip, он работает отлично.

Я ищу в Интернете несколько причин этой проблемы, но не могу ее исправить.

Я перенаправил порт на локальный IP-адрес моей машины (192.168.1.3) в настройках маршрутизатора. Затем я проверил, прослушивает ли порт, когда я запустил серверное приложение, используя netstat -an. я видел такие строки, как, 0.0.0.0:19999 или []: 19999. 19999 - это номер порта, который я пытаюсь прослушать. Затем я изменил свой конструктор ServerSocket на 3 параметра, который также привязывает локальный адрес.

InetAddress miad = InetAddress.getByAddress(addr);
ServerSocket socket1 = new ServerSocket(port,10,miad);

адрес - это InetAddress моей машины локальный ip. После этих изменений, когда я запускаю серверное приложение, я запускаю netstat, и он показывает:

TCP   192.168.1.3:19999    0.0.0.0 LISTENING

Здесь я думаю, что мой сервер прослушивает порт, указанный правильно.

Я также отключил брандмауэр и антивирусное программное обеспечение.

Я видел несколько тем и обсуждений в сети об этой проблеме и пробовал большинство упомянутых там вещей, но я получаю сообщение об ошибке «Отказано в соединении».

Что я могу делать не так? Он работает без каких-либо ошибок при тестировании с localhost.

Ответы [ 2 ]

3 голосов
/ 04 декабря 2011

Это из-за роутера (не очень уверен, но почти). Попробуйте посмотреть, может ли веб-сервис, такой как www.canyouseeme.org, подключиться к вашему серверу.

Основная идея заключается в том, что внутренняя машина (внутри ЛВС) не может подключиться к машине внутри той же ЛВС с использованием внешнего (общедоступного) IP-адреса.

Я почти уверен, что он будет работать, используя ваш внутренний ip (192.168.1.3).

И если вы уверены, что вы правильно перенаправили порты, CanYouSeeMe скажет, что ваш сервер доступен. Если это не так, убедитесь, что ваш провайдер не блокирует порты по каким-то «соображениям безопасности».

0 голосов
/ 04 декабря 2011

Чтобы выяснить, относится ли ваша проблема к Java и программированию, пожалуйста, сделайте

telnet 192.168.1.3 19999

Если он не может подключиться, то superuser.com будет лучшим местом для обсуждения этой проблемы.

...