如何确定套接字缓冲区中是否收到所有数据?

2 sockets delphi

是否可以确定TServerSocket 接收缓冲区是否包含其中的所有数据?

bum*_*mmi 6

这就是协议的情况.

  • 可以是已定义的结束令牌.例如HTTP中的CR LF CR LF
  • 包含请求长度的标头.


alz*_*mar 5

没有办法确定OnRead是否已完成阅读,因为根据定义,没有结束.这意味着您不应该在没有特殊信息的情况下发送二进制数据.例如,您可以首先发送字节数(例如,比如4字节无符号整数),然后发送您希望发送的字节数.

在接收器方面,您首先要读取4个字节,现在您知道可以预期的字节数.

  • 这不是做到这一点的方法.操作系统决定何时向您发送另一口蛋糕.OnRead将读取操作系统为您提供的内容并对其进行缓冲.换句话说:你必须收集并做出反应.例如,当您收到"已宣布"字节的最后一部分后,您就可以处理它们了. (6认同)