0

是否可以像在 TCP 中一样拥有 NetworkStream,但在 UDP 中?

我知道 UDP 不允许检查和类似的东西。

但我想知道是否有可能拥有它,因此您可以在 Stream 中编写(而不是手动将 Byte 数组划分为适合包的大小)。

我只是想知道这个原因,测试和试验会很好。

4

2 回答 2

1

我通常这样做:

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 不适合您。您将内容视为“流媒体”这一事实表明您需要以相同的顺序接收您发送的所有内容。

于 2013-08-28T23:40:02.413 回答
0

问题是 UPD 不可靠,因此您可能会丢失一些数据。您可以将 UDP 作为流处理,仅由块发送。

于 2013-08-28T23:25:03.427 回答