【发布时间】:2012-01-17 12:58:39
【问题描述】:
我正在使用 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);
};
}
【问题讨论】:
标签: c# .net sockets udp datagram