UDP не может подключиться ни к чему, кроме 127.0.0.1 - PullRequest
0 голосов
/ 14 ноября 2011

Я не слишком уверен, почему это не сработает. Мое приложение работает нормально, если клиент и сервер запущены на одном и том же ПК, а значит 127.0.0.1, но не подключаются к другому ноутбуку с использованием IP-адреса 82.41.108.125, который является IP-адресом этого устройства.

Любая причина, почему это происходит?

Ответы [ 3 ]

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

Проверьте брандмауэр на вашем ноутбуке ... Большую часть времени он действует как спойлспорт.

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

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

Некоторая дополнительная информация, которая должна пролить некоторый свет на вещи

Сетевые устройства используют ARP (протокол разрешения адресов) и RARP (протокол обратного разрешения адресов) для сопоставления IP-адресов с канальным уровнем (MAC)адреса и обратно.Ваша сетевая карта (то, что подключается к вашему кабелю Ethernet) будет иметь уникальный MAC-адрес на обоих компьютерах.Для каждого ПК настроен IP-адрес, который используется протоколами более высокого уровня (протоколами сетевого уровня).

Компьютер A будет знать IP-адрес компьютера B (и он будет отличаться от IP-адреса компьютера), если ваша программаработает правильно.Когда компьютер A отправляет данные на компьютер B, предполагая, что они подключены напрямую и не проходят через маршрутизатор или что-то среднее, канальному уровню компьютера A потребуется преобразовать этот IP для компьютера B в MAC-адрес, который он может использовать.Это делается путем отправки широковещательной рассылки на все сетевые ПК в одной подсети с вопросом «Эй, это ваш IP !?»по существу.Тот, который имеет IP-адрес, совпадающий с транслируемым, да: «Да, это мой - и вот мой MAC-адрес, чтобы вы могли напрямую общаться со мной».

Итак, если два компьютера имеют один и тот же IP, все это идетк черту :) не делайте этого - дайте им уникальные IP-адреса и убедитесь, что компьютер A передает на тот же UDP-порт и IP-адрес, который также прослушивает компьютер B.Коммуникация работает в парах {IP, Port} - это как телефонный номер и код города.

Также ...

Как сказал EJP, UDP - это соединение без установления соединения.протокол - компьютер A просто отправляет на компьютер B и надеется, что компьютер B слушает правильно.Если компьютер B не прослушивал или находился в неправильном состоянии для обработки данных, данные будут просто отброшены и потеряны.Компьютер А не будет знать, что это произошло.Если вам нужна надежная связь, при которой он будет продолжать попытки, и вы будете уверены, что компьютер B получил данные компьютера А, то вместо этого используйте TCP - он выполняет трехстороннее рукопожатие для установления соединения и использует подтверждения, чтобы гарантировать повторную передачу данных, когда он недостичь другого конца.

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

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

Проверьте на сервере с помощью netstat -npu.

Если это не так, возможно, это проблема с брандмауэром, проверьте с помощью tcpdump или wireshark.

...