программирование сокетов в Java - PullRequest
0 голосов
/ 22 апреля 2009

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

java.net.ConnectException: Connection timed out: connect
        at java.net.PlainSocketImpl.socketConnect(Native Method)
        at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
        at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
        at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
        at java.net.Socket.connect(Socket.java:519)
        at java.net.Socket.connect(Socket.java:469)
        at java.net.Socket.<init>(Socket.java:366)
        at java.net.Socket.<init>(Socket.java:180)

Может ли кто-нибудь помочь мне решить эту проблему?

Ответы [ 4 ]

4 голосов
/ 22 апреля 2009

В дополнение к тому, что сказал Бхушан, проверьте, не блокируется ли он брандмауэром. В частности, встроенный в Windows XP брандмауэр часто меня ловит.

Вы также можете проверить ваше TCP-соединение (я предполагаю, что вы используете TCP) с помощью telnet'n от клиента к серверу, т.е.

client.host] telnet ip.of.server port.of.application

и посмотрите, какой ответ вы получите. Если вы получаете что-то кроме тайм-аута, то вы используете неправильные значения адреса / порта в объекте Socket.

1 голос
/ 22 апреля 2009

Как вы создали объект Socket в клиенте? Можем ли мы увидеть код сервера и клиента как? Возможно, вы используете localhost при создании клиентского объекта Socket. Вместо localhost используйте IP-адрес или имя хоста компьютера, на котором запущен Сервер. Также проверьте, находятся ли обе машины в одной сети и могут ли они видеть друг друга.

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

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

Спасибо Сунил Кумар Саху

0 голосов
/ 23 апреля 2009

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

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