Различия Socket.Send в .NET Framework 2.0 против 4.0 для UDP - PullRequest
1 голос
/ 13 января 2012

У меня есть приложение .NET 4.0, которое использует TCP и UDP для связи с сервером.

Клиент сначала подключается к серверу, используя соединение TCP, а затем обменивается некоторой информацией через некоторые пакеты UDP..

Обмен UDP инициируется сервером, который отправляет пакет клиенту.Клиент получает пакет и отвечает обратно на сервер, также через UDP.

Иногда сервер не получает ответ.Если я перекомпилирую приложение для целевой платформы .NET 2.0, сервер всегда получит пакет.

Итак, подведем итог:

  • Когда клиент скомпилирован с 4.0Framework, сервер не может получать пакет довольно регулярно.

  • Когда клиент скомпилирован с использованием инфраструктуры 2.0, сервер всегда получает пакет.

  • Это поведение согласуется с XP, Vista и Windows 7.

Я знаю, что UDP не гарантирует доставку пакетов, и, к сожалению, я не контролирую этот протокол, поэтому яне могу переключиться на TCP.

Я также знаю, что окна иногда отбрасывают UDP-пакеты, если требуется обновить кэш ARP, но почему это происходит последовательно с 4.0, а не с 2.0?

Я смотрел на 4.0и 2.0 реализации метода Socket.Send в Reflector, и они выглядят одинаково.

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