2014-02-05 4 views
1

У меня возникают проблемы с моей программой java socket. Я открываю ServerSocket на хосте A. На хосте B, который находится в той же частной сети, I попытайтесь связать сервер, но я всегда получаю таймаут.Java Socket работает только на «localhost», но не в частной сети

Хост A | Сервер | IP: 192.168.56.1
Host B | Клиент | IP: 192.168.47.1

На сервере хоста А ::

welcomeSocket = new ServerSocket(2323); 
socket = welcomeSocket.accept(); 

После открытия, что ServerSocket; на хосте B:

socket = new Socket("192.168.56.1", 2323); 

Затем через несколько секунд, есть исключение:

java.net.ConnectException: Connection timed out: connect 

розетка работает хорошо, когда я запустить сервер на любом хосте А или В и введите «локальный ».
Что здесь не так? Спасибо за вашу помощь.

+0

Вы можете связаться с администратором a, используя ping? – Markus

ответ

0

Если маска подсети 255.255.255.0 (что является нормой для класса С частных подсетях), то ваши две машины находятся в разных подсетях:

Host A | Server | IP: 192.168.56.1 
Host B | Client | IP: 192.168.47.1 

0,56. и .47. являясь оперативными элементами. Попробуйте изменить либо IP-адрес либо в 192.168.56.0/24, либо в 192.168.47.0/24, и все будет в порядке.

В качестве альтернативы вам потребуется установить статический маршрут между двумя подсетями.

Cheers,

0

Это обычно означает, что входящий порт 2323 не открыт на хосте А.
Так хозяйничать B не может подключиться к порту 2323 на хосте А.

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

Попробуйте это от хоста B:

telnet 92.168.56.1 2323

Если вы не можете подключиться таким образом, то клиентская программа Java
не будет подключаться тоже, и это нормально.

Затем обратитесь к администратору сети.

Если вы можете подключиться таким образом, только тогда вы должны посмотреть на
, фиксируя ваши Java-программы в некотором роде.

-1

Добавить запись в HOST файл, если IP является reachble

+0

Файл хоста соединяет IP-адреса и имена хостов - он абсолютно не связан с подключением! –

0

Javadoc для setSoTimeout(int) говорит, что это:

Включение/выключение SO_TIMEOUT с указанным тайм-аута в миллисекундах. С этой опцией, установленной на ненулевой тайм-аут, вызов accept() для , этот серверный сервер будет блокировать только этот промежуток времени. Если истекает время ожидания , возникает исключение java.net.SocketTimeoutException, хотя ServerSocket остается в силе. Опция должна быть включена до того, как будет введена операция блокировки. Таймаут должен быть> 0. Тайм-аут нуля интерпретируется как бесконечный тайм-аут.

Попробуйте это:

welcomeSocket.setSoTimeout (0);

Добавить это заявление, прежде чем блокировать сервер для принятия запроса от клиента.

Примечание. Убедитесь, что обе машины доступны друг другу для обеспечения правильного подключения.

+0

Поскольку OP утверждает, что он работает на 'localhost', скорее всего, это не проблема с латентностью, но в противном случае ваша точка верна (но, как указано, неактуальна). –

0

Благодарим за помощь!

Моя программа отлично работает. Благодаря подсказке Андерса с маской подсети я узнал, что IP-адрес ошибочен . В панели управления Windows был обнаружен другой IP-адрес для хоста A. На самом деле они находятся в одной маске подсети.

я скорее скорее ожидал адрес, данное

InetAddress.getLocalHost().getHostAddress() 

как мой адрес.
Итак, как я могу показать свой «настоящий» IP-адрес в java-программе?

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

  • Нет связанных вопросов^_^