Mono udpClient()无法发送-错误的校验和

时间:2019-04-08 15:25:54

标签: c# mono udpclient

我有一个用C#编写的简单UDP应用程序,需要在Linux的mono下运行。在我的个人PC上(Windows 10)它可以正常工作,但是在Linux机器上校验和显然不好。

我试图禁用校验和,但这只是使其完全不发送。

udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.NoChecksum, true);

我知道校验和不好的原因是因为tcpdump向我显示了

192.168.88.98.5059 > 192.168.88.37.5059: [bad udp cksum 0x3354 -> 0x56e7!] UDP, length 354

除此之外,还有很多工作代码,例如TcpListener等,这是不起作用的部分:

...
UdpClient udpClient = new UdpClient();
udpClient.ExclusiveAddressUse = false;
udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
// udpClient.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.NoChecksum, true);
udpClient.Client.Bind(IpEndPoint);
udpClient.Send(rtnMessage, rtnMessage.Length, RemoteIpEndPoint);

此外,无论使用这些选项还是校验和,我都不会在另一侧收到UDP消息。

0 个答案:

没有答案