私は、このようなソケットを持っている:Socket.Receive(byte [])は正確に1つのUDPパケットを返しますか?
s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
は私は正確に一つのデータグラムを受信
s.Receive(byte[]);
を呼び出すときに、私は、正しいですか?データグラムを1つずつ処理する必要があります。
私は、このようなソケットを持っている:Socket.Receive(byte [])は正確に1つのUDPパケットを返しますか?
s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
は私は正確に一つのデータグラムを受信
s.Receive(byte[]);
を呼び出すときに、私は、正しいですか?データグラムを1つずつ処理する必要があります。
返すのはです。 UDPパケットです。 (1は「何も返さない」の例外結果と考えている場合。)(備考セクション)
Socket.Recieve documentation状態:
あなたはコネクションレスのソケットを使用している場合は、を受信すると、を読み込みます最初に Connectメソッドで指定した宛先アドレスからキューに入れられたデータグラム。しかし
、次の文注意:あなたが受け取るデータグラムがバッファがメッセージの最初の部分で満たされます、バッファ・パラメータのサイズよりも大きい場合は、余分なデータが失われた
をSocketExceptionがスローされます。
コールはまた、タイムアウトに例外をスローするか、または存在する場合等の非ブロッキングモードで利用可能なデータは、
ハッピーコーディングありません。
はい、そうです。これを可能にするUDPの特定の機能を使用すると、UDPのどちらかを保証するものではありません心に留めなければなりません、順番に
one by one
によって、あなたが意味する場合Message Boundary Preservation.
、確実ととして知られています。詳細については、thisの記事を参照してください。