2013-08-28 43 views
0

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

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

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

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

+0

如果你不知道边界在哪里,你可以忍受数据包可能无序到达的事实吗? –

+0

这是测试,所以是:) – Zerowalker

回答

0

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

+0

我知道这不是可靠的,但我如何处理它作为一个流? – Zerowalker

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不适合你。您将内容视为“流式传输”的事实表明,您需要以相同的顺序收到您发送的所有内容。