Предыстория: я написал клиент-программу на Java. Сервер принимает входящие соединения через порт 2175 и записывает ответы на 2176, которые клиент прослушивает для ответа. Я отправляю сериализованные объекты по сети.

Проблема: Это все работает хорошо, если я запускаю свой клиент на той же машине, что и сервер. Я собрал клиентский jar и развернул его на другом компьютере, работающем в той же беспроводной сети, что и сервер. Теперь я получаю «ConnectionException: соединение отклонено». Поэтому я подумал, что должен жестко закодировать IP сервера и клиента, но это все равно не сработало.

Вопрос: Что еще мне нужно сделать, чтобы два компьютера общались друг с другом (с точки зрения сетевого взаимодействия, а не Java)?

4 ответа4

1

Если вы получаете отказ в соединении, вы можете общаться с устройством, оно просто не прослушивает этот IP-адрес. Попробуйте открыть службу на всех IP-адресах (например, не указав один)

Кстати: вам нужен только один порт для отправки и получения.

1

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

0

У меня тоже была эта пробема. Я уверен, что человек, который опубликовал эту проблему, использовал Windows, когда он и она развернули серверную программу. Как я цитировал ранее, проблема заключается в брандмауэре Windows. Да, он блокирует все остальное, кроме вируса, который должен был блокировать. :П.

Итак, вот мое решение проблемы. Разверните серверную программу в Ubuntu. Если на вашем компьютере не запущена Ubuntu, просто установите ее на виртуальную машину, чем я сейчас и занимаюсь. Если вы используете Windows 8.1 Pro, он поставляется со встроенной виртуальной машиной под названием Hyper-V.

Все, что вам нужно сделать, это

  1. Загрузите ОС Ubuntu и запустите (вернее, установите) через Hyper-V.
  2. Установите Java на Ubuntu (который работает на Hyper-V).
  3. После установки Java получите IP-адрес виртуальной машины, на которой работает Ubuntu, набрав в терминале "ifconfig". Имеет формат 192.168.xx Итак, это IP вашего сервера.
  4. Теперь запустите клиентскую программу в Windows и, когда вы пытаетесь подключиться к серверу, укажите IP-адрес сервера (который вы только что получили, выполнив шаги, описанные выше) в вашей клиентской программе.
0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .