2010-04-06 3 views
3

У меня возникли проблемы с подключением моего онлайн-приложения к другим через другую сеть. Я могу дать им 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.."); 
} 
+0

то, что IP-адреса вы видите? 2222 не является IP-адресом. –

+0

Любые результаты тестирования? –

+0

Вы решили проблему. пожалуйста, сообщите об этом решению или любом ресурсе. У меня та же проблема. –

ответ

7

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

+0

Теперь, когда вы упомянули об этом, я думаю, что моя сеть Universitiy использует это для маскирования IP-адресов. Я сделаю некоторое независимое подтверждение в ближайшие несколько часов. Интересно, как обойти это. – maleki

+0

Обе машины в сети Uni или только одна? Вам нужно всего лишь настроить перенаправление портов на одном из компьютеров для работы. Другое решение - использовать третью машину, которая находится в открытом интернете в качестве прокси. –

+0

При тестировании только один был.Я собираюсь протестировать, если хост-машина не будет в университетской сети. – maleki

0

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

1

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

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

Обычно вам необходимо настроить маршрутизатор, чтобы открыть порт 2222 (вы также можете открыть порт 5555 и указать маршрутизатору перенаправление на хост, который вы хотите на своем LAN (их может быть много) и порт 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

Будьте осторожны, если вы оставите порт открытым в Интернете ... даже то, что кажется фиктивным сервером, иногда может быть использовано хакерами. –

Смежные вопросы