c# – 如何解决TCP在一次读取中没有获得所有字节的问题
我刚读了一篇文章说TCPClient.Read()可能无法在一次读取中获得所有发送的字节.你怎么解释这个?
例如,服务器可以将字符串写入tcp流.客户端读取字符串的一半字节,然后在另一个读取调用中读取另一半. 你怎么知道何时需要组合两个调用中收到的字节数组? 解决方法
您需要在协议级别做出决定.有四种常见的型号: >接近完成:每一方每个连接只能发送一条“消息”.发送消息后,它们关闭套接字的发送端.接收方保持读取直到它到达流的末尾. 此外,不太常见的是,协议中每条消息总是特定大小 – 在这种情况下,您只需要继续操作,直到您读取了那么多数据. 在所有这些情况下,你基本上需要循环,将数据读入某种缓冲区,直到你有足够的数据,但是你确定了.您应该始终使用Read的返回值来记录实际读取的字节数,并始终检查它是否为0,在这种情况下,您已到达流的末尾. 还要注意,这不仅会影响网络流 – 除了本地MemoryStream之外的任何东西(它总是读取你一次要求的数据,如果它一直在流中),你应该假设数据可能仅在多个电话的过程中可用. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |