gpt4 book ai didi

c# - clientStream.Read 返回错误的字节数

转载 作者:行者123 更新时间:2023-11-30 19:12:10 25 4
gpt4 key购买 nike

此代码有效:

TcpClient tcpClient = (TcpClient)client;
NetworkStream clientStream = tcpClient.GetStream();
byte[] message = new byte[5242880];
int bytesRead;

bytesRead = clientStream.Read(message, 0, 909699);

但这会返回错误的字节数:

bytesRead = clientStream.Read(message, 0, 5242880);

为什么?我该如何解决?

(实际数据大小为1475186,代码返回字节数11043)

最佳答案

如果这是一个基于 TCP 的流,那么答案是其他数据还没有到达。

TCP 是面向流的。这意味着 Send/Write 调用的数量与接收事件的数量之间没有关系。多个写入可以组合在一起,单个写入可以拆分。

如果你想在 TCP 上处理消息,你需要在它之上实现你自己的打包算法。实现这一目标的典型策略是:

  1. 前缀每个按其长度打包,通常用二进制数据
  2. 使用分隔序列,例如换行符。通常用于文本数据。

如果您想以阻塞方式读取所有数据,您可以使用循环直到 DataAvailabletrue 但随后调用 Read 返回0。 (希望我没有记错那部分,好久没做过网络编程了)

关于c# - clientStream.Read 返回错误的字节数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8575659/

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