TCP と同じように NetworkStream を UDP で使用することは可能ですか?
UDP がチェックなどを許可していないことは知っています。
しかし、それが可能かどうか疑問に思うので、Stream に書き込むことができます (手動で Byte 配列をパッケージに合わせたサイズに分割する必要はありません)。
この原因をテストして実験するのはいいことだと思っています。
TCP と同じように NetworkStream を UDP で使用することは可能ですか?
UDP がチェックなどを許可していないことは知っています。
しかし、それが可能かどうか疑問に思うので、Stream に書き込むことができます (手動で Byte 配列をパッケージに合わせたサイズに分割する必要はありません)。
この原因をテストして実験するのはいいことだと思っています。
私は通常これを行います:
var writer = new StringWriter();
writer.WriteLine("Stuff!");
writer.WriteLine("Things!");
...
var bytes = new ASCIIEncoding().GetBytes(writer.GetStringBuilder().ToString());
_udpClient.Send(bytes, bytes.Length, _host, _port);
読み取り側では、これを行うことができます:
var bytes = _udpClient.Receive(ref remoteEP);
var packetString = new ASCIIEncoding().GetString(bytes);
var reader = new StringReader(packetString);
reader.ReadLine(); // Stuff!
reader.ReadLine(); // Things!
厳密にはストリーミングではありませんが (大量のコンテンツがある場合、メモリ内のバイト配列が問題になる可能性があります)、これは小さなパケットでうまくいきました。
私のアプリケーションでは、パケットが失われたり、順不同で到着したりしてもまったく問題ないことに注意してください。これはあなたのアプリケーションでもそうでなければなりません。そうでなければ、UDP はあなたのためではありません。コンテンツを「ストリーミング」と考えているという事実は、送信するすべてのコンテンツを同じ順序で受信する必要があることを示唆しています。
問題は、UPD が信頼できないため、一部のデータが欠落する可能性があることです。UDP をストリームとして扱うことができ、チャンクでのみ送信されます。