我将System.Net.Sockets.UdpClient
类用作游戏客户端,服务器和API之间通信系统的基础层,因此我需要确保接收到的数据没有损坏。并且将wikipedia says指定为UDP协议中包括校验和控制。
我的客户发送:
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至少应该静默丢弃该数据包。
如果我想保证数据的完整性,那么我将不得不在假定存在的算法之上编写另一种算法。
我想念什么?
谢谢。
[EDIT]
正如罗恩(Ron)所指出的那样,校验和覆盖仅在IPv4中是可选的,因此我想默认情况下它是禁用的。
但是我无法弄清楚如何启用它,我尝试了SetSocketOption(SocketOptionLevel.Udp, SocketOptionName.ChecksumCoverage, 1)
,但是它以任何类型的参数(bool,int,空字节数组,null)不断抛出System.Net.Sockets.SocketException: An invalid argument was supplied
错误。在互联网上看了一下,但是我什么也没找到,如果有人知道,请告诉我:)