クラスを使用しSystem.Net.Sockets
Socket
てUDPデータグラムを受信しています。データグラムの有効性を確認するために、受信したデータグラムの正確な長さを知りたいと思いました。
Socket.Receive(Byte())
メソッドのドキュメントによると:
コネクションレス型ソケットを使用している場合、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);
};
}