gpt4 book ai didi

c# - 如何确保从 NetworkStream 读取所有数据

转载 作者:可可西里 更新时间:2023-11-01 02:35:44 27 4
gpt4 key购买 nike

当 DataAvailable 为 false 时,是否确定所有数据都从 NetworkStream 中读取?

或者数据的发送方是否必须先发送数据的长度。并且我必须读取直到读取了发送方指定的字节数?

示例:

private Byte[] ReadStream(NetworkStream ns)
{
var bl = new List<Byte>();
var receivedBytes = new Byte[128];
while (ns.DataAvailable)
{
var bytesRead = ns.Read(receivedBytes, 0, receivedBytes.Length);
if (bytesRead == receivedBytes.Length)
bl.AddRange(receivedBytes);
else
bl.AddRange(receivedBytes.Take(bytesRead));
}
return bl.ToArray();
}

最佳答案

DataAvailable 只是告诉您缓冲的内容和本地可用的内容。就可能到达的内容而言,这意味着 完全没有DataAvailable 最常见的用途是在同步读取和异步读取之间做出决定。

如果您希望入站流在发送后关闭,那么您可以继续使用Read 直到获得非肯定结果,这会告诉您已经到了尽头。如果他们正在发送多个帧,或者只是没有关闭 - 那么是的:您需要某种方法来检测帧的结尾(=逻辑消息)。 可以通过长度前缀和计数,但也可以通过标记值。例如,在基于文本的协议(protocol)中,\n\r 通常被解释为“消息结束”。

所以:这完全取决于您的协议(protocol)。

关于c# - 如何确保从 NetworkStream 读取所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14709781/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com