【发布时间】:2012-09-11 09:47:09
【问题描述】:
if(socket_recv ( $sock , $buf , 2045, MSG_WAITALL ) === FALSE)
{
$errorcode = socket_last_error();
$errormsg = socket_strerror($errorcode);
die("Could not receive data: [$errorcode] $errormsg <br>");
}
echo $buf;
从上面的函数中它没有显示完整的消息,所以我尝试像这样获取变量 $buf 的最大长度
socket_recv ( $sock , $buf , strlen($buf), MSG_WAITALL )
但不起作用。请帮帮我
谢谢和问候,
【问题讨论】:
-
您希望接收的数据的大小(以字节为单位)是多少?第一步是查看协议规范以了解这一点。
-
strlen()没有获得$buf的最大大小,它获得了$buf中当前数据的大小。这是什么类型的套接字,流还是数据报? -
@Barmar 流 $sock = socket_create(AF_INET, SOCK_STREAM, 0)
-
你需要循环调用
socket_recv(),直到你得到所有东西。除非应用协议指定特定的消息大小,否则它可以是任意长度。 -
@Barmar 它可以是任何长度,从 1 到缓冲区大小。它是字节流协议,而不是消息协议。应用程序消息大小与此无关。