Невозможно подключиться к сокету через разные сети - PullRequest
3 голосов
/ 06 апреля 2010

У меня проблемы с подключением моего онлайн-приложения к другим пользователям через другую сеть. Я могу дать им hostAddress для подключения, когда мы находимся в одной сети, но когда мы делаем это через Интернет, сгенерированный адрес хоста не разрешает соединение, а также не использует IP-адрес, полученный с онлайн-сайтов, таких как whatismyip .com

Моя самая большая проблема не в отладке этого кода, потому что он работает внутри сети, но сервер не видит попыток, когда мы пытаемся перейти в другие сети. Кроме того, тестовый порт, который я использую, - 2222.

InetAddress addr = InetAddress.getLocalHost();
String hostname = addr.getHostName();
System.out.println("Hostname: " + hostname);
System.out.println("IP: " + addr.getHostAddress());

Я отображаю хост на сервере, когда он запускается

if (isClient) {
System.out.println("Client Starting..");
clientSocket = new Socket(host, port_number); 
} else {
System.out.println("Server Starting..");
echoServer = new ServerSocket(port_number);
clientSocket = echoServer.accept();
System.out.println("Warning, Incoming Game..");
}

Ответы [ 3 ]

7 голосов
/ 06 апреля 2010

Если он работает в локальной сети, но не через Интернет, то один или оба партнера, вероятно, подключены к NAT'-подключению , что означает, что публичный IP-адрес, который вы видите в Интернете, не совпадает в качестве IP-адреса машины, с которой вы пытаетесь общаться. Вам, вероятно, потребуется настроить какую-то переадресацию порта , чтобы ваше приложение могло подключаться.

1 голос
/ 09 апреля 2010

Возможно, проблема в конфигурации брандмауэра.

Предполагается, что вы тестируете это дома (обычно это будет сложнее в университете или компании).

Обычно вам необходимо настроить маршрутизатор, чтобы открыть порт 2222 (вытакже можно открыть порт 5555 и указать маршрутизатору, чтобы он перенаправлял на нужный хост на вашей локальной сети (их может быть много), и порт 2222).

Подводя итог: другой пользователь ----> интернет ----> [ваш модем] internet_IP -> [ваш маршрутизатор] lan_IP -> ваш компьютер lan_IP2

internet_IP предоставляется вашим провайдером;найдите его здесь: http://www.whatismyip.com/ lan_IP: вы определили в своей конфигурации маршрутизатора.Обычно: 192.168.0.1 lan_IP2: обычно передается на ваш ПК через маршрутизатор (DHCP).Чтобы найти его, введите ipconfig (Windows) или ifconfig (Linux).

Вам нужно указать маршрутизатору открыть порт 2222 и направить его к lan_IP2 на порту 2222. Настройка маршрутизатора обычно выполняется путем подключения кhttp интерфейс: http://192.168.0.1

0 голосов
/ 06 апреля 2010

Некоторая дополнительная информация может быть полезна.Можете ли вы пинговать машину, где вы находитесь?Вы пытаетесь пройти через брандмауэр?Вы говорите, что они работают через локальный хост или локальную сеть - они немного отличаются.Вы имеете в виду сеть, использующую локальное пространство (т. Е. 10. . . * Или 192.168. . или подобное)?Вы говорите, что используете тестовый IP-адрес 2222 - это не IP-адрес.Это домен адреса?Или это номер порта?

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