像TCP一样流UDP?

时间:2013-08-28 23:22:38

标签: c#

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

我知道UDP不允许检查等等。

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

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

2 个答案:

答案 0 :(得分: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不适合您。您将内容视为“流式传输”的事实表明您需要以相同的顺序接收您发送的所有内容。

答案 1 :(得分:0)

问题是UPD不可靠,所以你可能会错过一些数据。 您可以将UDP作为流处理,仅由块发送。