首页 > 解决方案 > Mono udpClient() 无法发送 - 校验和错误

问题描述

我有一个用 C# 编写的简单 UDP 应用程序,它需要在 Linux 的单声道下运行。它在我的个人电脑(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 消息。

标签: c#monoudpclient

解决方案


推荐阅读