gpt4 book ai didi

.net - NetworkStream.DataAvailable 是否看到缓冲数据?

转载 作者:行者123 更新时间:2023-12-05 00:09:35 32 4
gpt4 key购买 nike

NetworkStream.DataAvailable 是否知道发送方的发送缓冲区是否为空?或者它只是简单地指示接收方的读取缓冲区是否有数据?我的假设是后者...

具体来说,对于一些涉及正在进行的对话的套接字工作,我目前使用长度前缀,以便接收者确切地知道当前批次中有多少数据;但是,我收到了一个 .patch,建议我改用 NetworkStream.DataAvailable。我担心的是,这只会告诉我接收方得到了什么——而不是发送方最初发送的——但我不是套接字专家。

我错了吗?或者长度前缀是要走的路?

(请注意,在流关闭之前我不能简单地 Read(),因为在同一个连接上发送多个批次,并且将每个批次视为单独的至关重要;如果我在一个批次中读取太多(即使它被缓冲并丢弃)然后对话将中断)。

最佳答案

连接的一侧不会知道另一侧的发送缓冲区是否为空。
DataAvailable仅指示是否有传入数据要读取。您可以在 Read() 之前使用它,但它本身并不能为您提供所需的信息。它不会告诉您每批的开始和结束。

我之前对来回对话进行了编码,并且在数据中使用了长度前缀。我所做的是编写辅助函数来读取确切数量的字节(一次块),仅此而已。

流中批次长度值的唯一替代方法是通过某种方式检查传入数据并识别批次的开始和结束。

关于.net - NetworkStream.DataAvailable 是否看到缓冲数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/166530/

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