clientStream.Readreturnswrongnumberofbytes这段代码有效:TcpClienttcpClient=(TcpClient)client;NetworkStreamclientStream=tcpClient.GetStream();字节[]消息=新字节[5242880];intbytesRead;bytesRead=clientStream.Read(消息,0,909699);但这会返回错误的字节数:bytesRead=clientStream.Read(message,0,5242880);为什么?我该如何解决?(实际数据大小为1475186;代码返回11043作为字节数)如果这是一个基于TCP的流,那么答案是其余数据尚未到达。TCP是面向流的。这意味着发送/写入调用的数量与接收到的事件数量之间没有关系。多个写入可以组合在一起,单个写入可以拆分。如果你想通过TCP使用消息,你需要在它之上实现你自己的打包算法。实现这一点的典型策略是:每个前缀按其长度打包,通常使用换行符等分隔序列的二进制数据。通常带有文本数据。如果你想以阻塞方式读取所有数据,你可以使用循环直到DataAvailable为真,但随后对Read的调用返回0。(希望我没记错那部分,还没有完成任何网络编程)来自MSDN:读取操作读取尽可能多的数据,直到大小参数指定的字节数。也就是说,您必须在循环中调用Read()方法,直到收到所有数据。查看MSDN中的示例代码。您需要循环读取消息中的字节,直到TCP客户端上的Available属性或NetworkStream的DataAvailable属性为0(=没有更多字节)阅读文档:此方法将数据读入缓冲区参数并返回一个成功读取字节。如果没有数据可供读取,则Read方法返回0。Read操作会读取尽可能多的数据,直到达到size参数指定的字节数。如果远程主机关闭连接,并且已接收到所有可用数据,则Read方法立即完成并返回零字节。所以也许是因为连接失败,你每次都得到不同的数字,无论如何你可以检查结果并知道它的原因。我认为这里的答案很好地回答了你的具体问题,但可能更笼统:如果你试图通过网络通信的networkStream对象发送数据,请查看开源库networkComms.net。以上就是C#学习教程的全部内容:clientStream.Read返回字节数错误。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
