在PHP限制中发送tcp数据包

在PHP限制中发送tcp数据包,tcp,max,fwrite,Tcp,Max,Fwrite,我正在尝试使用fwrite向tcp服务器发送一个大数据包(9170字节) fwrite($this->_socket, $data); 问题是它先发送8192,然后再发送剩余的978字节 我想将每次发送的发送量从8192减少到1444,根据文档,fwrite的第三个可选参数是length。它表示在到达字符串结尾之前将发送的最大字节数。这不是解决你问题的办法吗 请参阅文档下方注释中的示例,其中包含如何使用带长度的fwrite的示例。$data是字符串,对吗?您可以使

我正在尝试使用fwrite向tcp服务器发送一个大数据包(9170字节)

            fwrite($this->_socket, $data);
问题是它先发送8192,然后再发送剩余的978字节 我想将每次发送的发送量从8192减少到1444,根据文档,fwrite的第三个可选参数是length。它表示在到达字符串结尾之前将发送的最大字节数。这不是解决你问题的办法吗


请参阅文档下方注释中的示例,其中包含如何使用带长度的fwrite的示例。

$data是字符串,对吗?您可以使用substr()进行拆分,然后继续发送。

在这种情况下,只需发送1444字节,然后等待来自服务器的用户级确认消息。这样看起来一次发送1444字节。这也将是痛苦的缓慢

根本问题是TCP不能发送超过一个字节的消息—它传输字节


在TCP上添加一个可以发送消息的协议。

TCP层可以做到这一点,您不必这样做。如果您写入9880个字节,而服务器仅尝试读取其中的1444个字节,那么它将达到前1444个字节。服务器下次尝试读取时,将获取下一个或多个字节


客户端不必安排传输来满足服务器的接收要求。TCP层的流控制将自动处理此问题


您正在解决一个非问题。

您试图解决的实际问题是什么?服务器一次接收的字节数不超过1444字节客户端不必安排传输以满足服务器的接收要求。TCP层将这样做。客户端可以发送9840个字节,如果服务器一次只接受1444个字节,它仍将获得所有字节。不幸的是,它在长度后停止,并且不分割字节。只需在循环中执行fwrite,在每次迭代中发送下一部分数据。