c# - 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 消息。
解决方案
推荐阅读
- r - R Shiny,没有堆栈跟踪和未使用的参数
- python - IndexError:调试 Python 脚本中的列表索引超出范围
- javascript - VueJS:在href中使用变量
- swiftui - SwiftUI 组合函数 -> 任何发布者返回类型
- javascript - 使用选择多个使用谷歌应用程序脚本将多个值发送到谷歌表格
- python - 使用python读取多行不同数据类型
- azure - 获取 ADLS 目录和子目录路径,直到它使用 databricks 获取表中的文件格式
- canvasjs - 如何在canvasjs中禁用金字塔图的扩展区域
- google-apps-script - 如何执行 Google Add-on 自动部署/发布?
- zlib - 多线程压缩、随机访问和即时读取