此代码有效:
TcpClient tcpClient = (TcpClient)client;
NetworkStream clientStream = tcpClient.GetStream();
byte[] message = new byte[5242880];
int bytesRead;
bytesRead = clientStream.Read(message, 0, 909699);
Run Code Online (Sandbox Code Playgroud)
但是这会返回错误的字节数:
bytesRead = clientStream.Read(message, 0, 5242880);
Run Code Online (Sandbox Code Playgroud)
为什么?我该如何解决?
(实际数据大小为1475186;代码返回11043作为字节数)
如果这是一个基于TCP的流,那么答案是其余的数据还没有到达.
TCP是面向流的.这意味着Send/ Write调用次数和接收事件数量之间没有关系.可以将多个写入组合在一起,并且可以拆分单个写入.
如果要使用TCP上的消息,则需要在其上实现自己的打包算法.实现这一目标的典型策略是:
如果你想在你可以使用循环,直至阻塞的方式读取所有数据DataAvailable是true但后续调用Read返回0.(希望我能正确地记住那部分,暂时还没有做任何网络编程)