Java Socket на другой машине не работает - PullRequest
0 голосов
/ 14 сентября 2011

Я пробовал много примеров в Интернете, и один из них такой: http://zerioh.tripod.com/ressources/sockets.html

Все примеры сокетов сервер-клиент работают нормально, когда они протестированы с 127.0.0.1

НО никогда не работает EVAR на двух разных компьютерах с реальным необработанным реальным IP-адресом («не удалось подключиться к хосту» в telnet и «время ожидания подключения» при тестировании на клиенте java - программа сервера просто ожидает подключения)

Примечание:

  • Брандмауэр точно отключен
  • IP-адрес от ipconfig не работает
  • IP-адрес от myipaddress.com (который полностьюотличается ни от чего, кроме как от ipconfig) не работает

Что я пропускаю?Если бы я только мог это понять ...

Ответы [ 2 ]

0 голосов
/ 14 сентября 2011

На основании комментария, где упоминается следующий фрагмент кода:

requestSocket = new Socket("10.0.0.5", 2004); // ip from ipconfig 

было бы лучше использовать имя хоста вместо IP-адреса в конструкторе, поскольку двухпараметрический конструктор Socket с аргументом String ожидает имя хоста в виде строки, а не IP-адрес. Затем выполняется поиск IP-адреса на предоставленном имени хоста.

Если вам нужно передать IP-адрес, используйте двухпараметрический конструктор , который принимает InetAddress в качестве аргумента. Затем вы можете указать необработанный IP-адрес для метода InetAddress.getByAddress, как показано в следующем фрагменте:

InetAddress addr = InetAddress.getByAddress(new byte[]{10,0,0,5});

Вы должны быть осторожны при указании аргументов через байтовый массив, так как байты подписаны в Java (от -127 до +128), и возможно, должны быть указаны числа за пределами этого диапазона (но допустимые октеты IP-адресов) используя Integer.byteValue.

Наконец, следует отметить, что важно указать IP-адрес удаленного компьютера, который будет виден клиенту. IP-адрес, указанный на myipaddress.com, может быть адресом прокси-сервера, так как это общедоступный IP-адрес всей вашей сети, видимый хост-серверу на myipaddress.com. Поэтому вам следует указать IP-адрес удаленного компьютера, который виден вашему компьютеру, а не myipaddress.com.

0 голосов
/ 14 сентября 2011

Попробуйте связать на 0.0.0.0. Это говорит вашему сокету принимать соединения на каждом IP, который может принимать ваш локальный сервер.

...