C # udpclient / udp socket - работает локально, но не по глобальным адресам - PullRequest
1 голос
/ 03 декабря 2010

У меня очень раздражающая проблема. У меня есть приложение mIRC / Skype, то есть чат с текстом и голосом. Текст и чаты проходят через TCP и работают безупречно, в то время как UDP передает только записанные данные другим подключенным клиентам.

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

Вот пример:

Сервер использует сокет udp, в то время как клиент использует udpclient, но в любом случае результат тот же, и он также работает локально ..

сервер глобальный IP: 222.222.222.222 IP-адрес локального сервера: 192.168.2.3 порт сервера: 9999

client global ip: 111.111.111.111 IP-адрес клиента: 192.168.0.100 клиентский порт: 8888

Сервер * связывает свой сокет с 192.168.2.3: 9999 * получает от 111.111.111.111: 8888 * отправляет на 111.111.111.111.111: 8888

клиент * связывает свой сокет с 192.168.0.100 * получает от 222.222.222.222: 9999 * отправляет на 222.222.222.222: 9999

... вы понимаете, о чем я. Я понятия не имею, почему данные не проходят. Я попытался отправить / получить через порт 53 (для клиента и сервера), и это даже не должно быть необходимо, верно? Я имею в виду, что трафик должен проходить в любом случае (так же, как это происходит с играми, такими как Call of Duty), и нет, там нет активного брандмауэра Windows, только маршрутизатор в этом случае.

клиент / сервер использует connect () друг друга, а не receiveFrom / sendTo. Я тоже пытался это использовать, но без разницы.

Я не получаю никаких исключений или чего-либо еще, поэтому отладка невозможна: (

В чем может быть причина? Учитывайте тот факт, что он работает локально, но не глобально; Я согласен, что это действительно похоже на проблему с брандмауэром, но, как я описал выше, я не понимаю, как это применимо в моем сценарии, и я попытался использовать порт 53 и другие открытые порты.

Приветствия:)

РЕДАКТИРОВАТЬ: его довольно много кода, но при необходимости я могу скопировать его в

1 Ответ

2 голосов
/ 03 декабря 2010

Вы не можете транслировать UDP на весь Интернет (я полагаю, это то, что вы подразумеваете под «глобальным») - он будет работать только внутри подсети компьютера, отправляющего трансляцию.Вот почему он работает локально, а не с удаленными компьютерами.

Возможно, вы захотите использовать вместо этого IP Multicast:

http://en.wikipedia.org/wiki/IP_Multicast

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

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