我试图使用fwrite向tcp服务器发送一个大数据包(9170字节)
fwrite($this->_socket, $data);
问题是它首先发送8192然后发送左978字节 我想减少每次发送时从8192发送到1444的金额
答案 0 :(得分:1)
TCP层将执行此操作,您不必这样做。如果您写入9,880个字节且服务器仅尝试读取其中的1,444个字节,则它将达到前1,444个字节。下次服务器尝试读取时,它将获得下一个字节或字节。
客户端无需安排其传输以满足服务器的接收要求。 TCP层的流量控制将自动处理。
你正在解决一个无问题。
答案 1 :(得分:0)
根据fwrite文档,fwrite的可选第三个参数是length。它指定在到达字符串结尾之前将发送的最大字节数。这不是解决问题的方法吗?
请参阅文档下面的注释中的示例,它们包含如何使用fwrite和length的示例。
答案 2 :(得分:0)
$ data是一个字符串吗?您可以使用substr()进行拆分,然后继续发送。
答案 3 :(得分:0)
在这种情况下,只需发送1444个字节并等待来自服务器的用户级确认消息。这将给出一次发送1444个字节的外观。它也会很慢。
根本问题是TCP不能发送超过一个字节的消息 - 它会传输字节。
在TCP上添加可以发送消息的协议。