Разъем UDP от локального компьютера, код ошибки 10049 - PullRequest
0 голосов
/ 23 января 2012

Я искал в Интернете решение, но не повезло.

Мы делаем сокет, который может отправлять и получать данные. И клиентская, и серверная версии действуют как клиент и сервер. Проблема в том, что версия ip клиент-сервер находится в сети, использующей NAT, что означает, что когда сервер пытается получить сообщение, это не так, потому что сервер имеет публичный ip, и мы не можем найти решение , о том, как получить данные.

SetIPProtectionLevel не имеет ограничений, поэтому он должен работать.

Спасибо за помощь.

Мы попытались изменить IP-адрес на версии сервера на локальный, а затем отправить с клиента на общедоступный IP-адрес сервера, но безуспешно.

С локального ip клиента на ip локального сервера он работает.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2013

Возможно, проверьте установленное антивирусное программное обеспечение.

Нам пришлось выяснить, что некоторые AV sw прервали нашу межпроцессную связь, основанную на обмене сообщениями UDP - даже когда AV-часть, включенная в брандмауэр, была деактивирована и наш собственный sw был включен в список доверенных sw. Некоторые AV-продукты, похоже, настолько глубоко встраиваются в стек IP и делают странные вещи, чтобы отфильтровать подозрительную связь, что может привести к странным последствиям. Единственное, что помогло, это деинсталляция AV-защиты sw.

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

0 голосов
/ 23 января 2012

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

1) На сервере проверьте список всех IP-адресов хоста.Свяжите сокет UDP с каждым IP-адресом.Вы можете пропустить это, если у сервера есть только один публичный IP-адрес, и это единственный адрес, по которому он будет достигнут.

2) Отправьте ответ UDP точно на тот же сокет, на который вы получили запрос.Это очень важно для обеспечения того, чтобы адрес источника ответа соответствовал адресу назначения.

3) Отправьте ответ UDP точно на тот же IP-адрес и порт, на который вы получили запрос.Не обращайте внимания на то, что другой конец говорит о том, что он считает своим IP-адресом или с какого порта он отправляет.

И несколько замечаний:

Под "сервером" я имею в виду сторонуэто не за NAT.Если у вас нет различий между клиентом и сервером, следуйте правилам сервера для обеих сторон, и с вами все будет в порядке.

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

Помните, что вы не можете полагаться на информацию IP / порта в пакете, чтобы сказать вам, откуда пришел пакет, потому что NAT может изменить его,Таким образом, вам нужно будет поместить достаточно информации в полезную нагрузку дейтаграммы, чтобы сделать это.В идеале следует ожидать, что IP / порт конечной точки может измениться в любое время, и отправлять все пакеты на IP / порт, с которого вы последний раз получали пакет от этого конкретного клиента.

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