我正在使用
我想知道接收到的数据包的确切长度,以检查数据包的有效性。
如果您正在使用无连接Socket,则Receive将从您在Connect方法中指定的目标地址读取第一个排队的数据报。如果您接收到的数据报大于缓冲区参数的大小,则缓冲区将被填充消息的第一部分,多余的数据将丢失并抛出SocketException异常。
是否有办法找出下一个数据报的大小?
System.Net.Sockets
中的 Socket
类来接收UDP数据包。我想知道接收到的数据包的确切长度,以检查数据包的有效性。
Socket.Receive(Byte())
方法文档说明如下:如果您正在使用无连接Socket,则Receive将从您在Connect方法中指定的目标地址读取第一个排队的数据报。如果您接收到的数据报大于缓冲区参数的大小,则缓冲区将被填充消息的第一部分,多余的数据将丢失并抛出SocketException异常。
Socket.Available
属性提供可读取的字节数总和,这是所有排队数据报的大小之和。是否有办法找出下一个数据报的大小?
public static void Receive()
{
Byte[] buf, discardbuf;
const int paklen = 32; //correct packet length
int l;
buf = new Byte[paklen];
discardbuf = new Byte[4096];
while (rcv_enable)
{
l = soc.Available;
if (l == 0) continue;
if (l == paklen) soc.Receive(buf); //receive the correct packet
else soc.Receive(discardbuf); //discard otherwise
Thread.Sleep(200);
Console.WriteLine("Received {0}", l);
};
}