NetworkStream.DataAvailable是否知道发件人的发送缓冲区是否为空?或者它只是表明接收者的读缓冲区是否有数据?我的假设是后者......
具体来说,对于涉及正在进行的对话的一些套接字工作,我目前使用长度前缀,以便接收者确切地知道当前批次中有多少数据; 但是,我已经发送了一个.patch,建议我使用NetworkStream.DataAvailable.我担心的是,这只会告诉我接收器的内容 - 而不是发送者最初发送的内容 - 但我不是套接字专家.
我错了吗?或者是长度前缀的方式去?
(注意我不能简单地读取()直到流关闭,因为在同一个连接上发送了多个批次,并且将每个批处理视为单独处理是至关重要的;如果我在一个批次中读取太多(即使它得到缓冲和丢弃)然后谈话将破裂).
连接的一端不会知道对方的发送缓冲区是否为空.
DataAvailable
仅指示是否有要读取的传入数据.您可以使用之前的Read()
,但它本身并不能提供您想要的信息.它不会告诉您每批的开始和结束.
我以前编写了来回对话,我在数据中使用了长度前缀.我所做的是编写辅助函数,读取精确的字节数(一次是块),而不是更多.
流中批量长度值的唯一替代方法是检查传入数据并识别批次的开头和结尾.