をストリーミングするには、のは、UDPの送信者は、数回のSendTo実行されることを言ってみましょう:データが利用可能な場合読書UDPソケット:レコードまたは
sendto(s, buffer, 100, ...); sendto(s, buffer, 200, ...); sendto(s, buffer, 300, ...);
レシーバは、次のコードを実行:今すぐ
void OnReceive() { recvfrom(s, buffer, 1000, ...); }
、もしすべてのデータが( 100 + 200 + 300)は、recvfromが呼び出されたときに使用できます。これは、1つのrecvfrom呼び出し、または予測不可能なサイズのrecvfrom呼び出しによって読み取られる可能性がありますか?それとも、送信されたのと同じ部分で常に受信されます:100,200,300?
100%正しいレシーバコードを書き込むには、種類のストリーム解析ロジックまたはデータ読み取りロジックを実装する必要がありますか?
この質問では、データが失われず、パケットの順序が変更されないと仮定しますが、一般的にUDPソケットでは正しくありません。 (例外は新しいLinux固有recvmmsg(2)
APIである)、すなわちと仮定したパケットが並べ替えされていないとあなたがカーネルに与えるバッファが十分な大きされているキューにデータグラムUDPソケットデキューから
また、パケットがドロップされないと仮定します。 –
はい、それもありがとうございます。 –