C# UdpClient ".Receive" 只提供由 wireshark 识别的部分数据包
C# UdpClient ".Receive" only giving part of packet identified by wireshark
基本上我的代码只在我需要获取所有 UDP 协议数据包时捕获它的一部分。
UdpClient listener = new UdpClient(43965);
IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 43965);
long count = 0;
while(1 == 1)
{
if (listener.Available > 0)
{
byte[] data = listener.Receive(ref endpoint);
Console.WriteLine(Encoding.ASCII.GetString(data));
}
}
我得到(突出显示):
我应该得到:
正如 Visual Vincent 所说,"MICS" 后跟 0x10,然后是 0x00,因此如果您将数据包的那部分视为 null-terminated 字符串,则它是 "MICS\x10"。
如您所见,您必须查看原始字节才能找到其后的数据。
之前的数据是 UDP header、IP header 和以太网 header。从 UDP 套接字读取时,您不会获得那些 headers,您只会获得 UDP 负载。
基本上我的代码只在我需要获取所有 UDP 协议数据包时捕获它的一部分。
UdpClient listener = new UdpClient(43965);
IPEndPoint endpoint = new IPEndPoint(IPAddress.Any, 43965);
long count = 0;
while(1 == 1)
{
if (listener.Available > 0)
{
byte[] data = listener.Receive(ref endpoint);
Console.WriteLine(Encoding.ASCII.GetString(data));
}
}
我得到(突出显示):
我应该得到:
正如 Visual Vincent 所说,"MICS" 后跟 0x10,然后是 0x00,因此如果您将数据包的那部分视为 null-terminated 字符串,则它是 "MICS\x10"。
如您所见,您必须查看原始字节才能找到其后的数据。
之前的数据是 UDP header、IP header 和以太网 header。从 UDP 套接字读取时,您不会获得那些 headers,您只会获得 UDP 负载。