Я использую класс System.Net.Sockets.UdpClient
в качестве базового уровня моей системы связи между моим игровым клиентом, сервером и API, поэтому я должен быть уверен, что полученные данные не были повреждены.И как Википедия говорит , указано, что управление контрольной суммой включено в протокол UDP.
Тем не менее, когда я пытаюсь проверить это с помощью Clumsy со следующими настройками:
Мой клиент отправляет:
00-09-00-00-00-00-00-01-05-00-00-00-32-39-30-30-36-05-93-34-E6-BF-05-92-E9-5B-3E-01-00-01-00-01-00 ActorUpdateRequestPacket [Character]
Таким образомсервер получает этот искаженный пакет:
00-09-00-00-00-00-00-01-05-00-00-00-37-34-30-38-9F-50-58-D9-9B-80-1A-BD-37-F6-BF-01-00-05-6F-9C-F2-BE-05-61-6F-61-3F
Никаких ошибок не возникает (кроме случаев, когда я явно пытаюсь десериализовать) ничего не происходит, и я не знаю почему, поскольку контрольная сумма не должна совпадать с полученными даннымиследовательно, UdpClient должен, по крайней мере, молча отбросить пакет.
Если я хочу гарантировать целостность своих данных, то я был бы вынужден написать другой алгоритм поверх предположительно существующего.
Чего мне не хватает?
Спасибо.
[РЕДАКТИРОВАТЬ]
Как указал Рон, покрытие контрольной суммы является необязательным в IPv4, поэтому я думаю, что оно отключенопо умолчанию.Однако я не могу понять, как включить его, я пытался SetSocketOption(SocketOptionLevel.Udp, SocketOptionName.ChecksumCoverage, 1)
, но он продолжает выдавать ошибку System.Net.Sockets.SocketException: An invalid argument was supplied
с любым видом аргумента (bool, int, пустой байтовый массив, ноль) .. Я смотрел в Интернетено я ничего не нашел, если кто-нибудь знает, пожалуйста, скажите мне:)