У меня есть приложение .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, и они выглядят одинаково.