繁体   English   中英

像TCP一样流UDP?

[英]Stream UDP like TCP?

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

我知道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作为流处理,仅按块发送。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM