Estoy usando System.Net.Sockets
Socket
clase para recibir los datagramas UDP. Quería saber la longitud exacta del datagrama recibido para verificar la validez del datagrama.tamaño del siguiente datagrama en cola - UDP
Socket.Receive(Byte())
documentación del método dice:
Si está utilizando una conexión de socket, reciben leerá el primer datagrama en cola desde la dirección de destino que especifique en el método Connect. Si el datagrama que recibe es más grande que el tamaño del parámetro del búfer, el búfer se llena con la primera parte del mensaje, el exceso de datos se pierde y se lanza una SocketException.
Socket.Available
propiedad da el total de bytes disponibles para leer, Esto resume el tamaño de todos los datagramas en cola.
¿Hay alguna forma de averiguar el tamaño del siguiente datagrama?
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);
};
}
¡Perfecto! Esta sobrecarga hace el trabajo y no se lanza ninguna excepción. Parece que la documentación de MSDN es incorrecta. Gracias.-BTW No pude encontrar ningún ejemplo relevante para [SocketFlags enum] (http://msdn.microsoft.com/en-us/library/system.net.sockets.socketflags.aspx) en MSDN. – Anniffer
@Anniffer genial, no dude en aceptar esta respuesta si se resolvió su pregunta :) –
Aceptado ..... :) – Anniffer