размер следующей дейтаграммы в очереди - UDP

Я использую класс 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);
    };
}
6
задан Otiel 10 December 2011 в 18:55
поделиться