我有一个简单的 UDP 侦听器,我试图从中收集数据报。我的数据报可以是两种数据格式之一。使用第一种数据格式,我按预期在我的程序中接收数据。对于第二个,绝对没有迹象表明曾经从我的程序接收到数据,即使我可以验证 UDP 数据是否通过 Wireshark 传递到网络接口。我认为这些可能是 Windows 拒绝的格式错误的 UDP 数据包,但 Wireshark 确实将它们标记为 UDP。我的代码如下:
static void Main(string[] args)
{
Thread thdUdpServer = new Thread(new ThreadStart(serverThread));
thdUdpServer.Start();
}
static void serverThread()
{
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
socket.Bind(new IPEndPoint(new IPAddress(0), 2000));
while (true)
{
byte[] responseData = new byte[128];
socket.Receive(responseData);
string returnData = Encoding.ASCII.GetString(responseData);
Console.WriteLine(DateTime.Now + " " + returnData);
}
丢失的数据包都是 29 字节的数据报,看起来像这样(转换为 ASCII)。
#01RdFFFF...?...... ........F
为什么 Wireshark 会显示它们的存在,但 .NET 似乎看不到它们?