是否可以像在 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 作为流处理,仅由块发送。