如何在PHP中获取此函数socket_recv()的最大长度 if(socket\u recv($sock,$buf,2045,MSG\u WAITALL)==FALSE) { $errorcode=socket\u last\u error(); $errormsg=socket\u strerror($errorcode); die(“无法接收数据:[$errorcode]$errormsg”; } echo$buf;
从上面的函数中,它不显示完整消息,所以我尝试获得变量$buf的最大长度,如下所示 socket_recv($sock,$buf,strlen($buf),MSG_WAITALL) 但不是工作。请帮助我如何在PHP中获取此函数socket_recv()的最大长度 if(socket\u recv($sock,$buf,2045,MSG\u WAITALL)==FALSE) { $errorcode=socket\u last\u error(); $errormsg=socket\u strerror($errorcode); die(“无法接收数据:[$errorcode]$errormsg”; } echo$buf;,php,sockets,Php,Sockets,从上面的函数中,它不显示完整消息,所以我尝试获得变量$buf的最大长度,如下所示 socket_recv($sock,$buf,strlen($buf),MSG_WAITALL) 但不是工作。请帮助我 thx和ADVICES,您应该通过循环接收响应 if(socket_recv ( $sock , $buf , 2045, MSG_WAITALL ) === FALSE) { $errorcode = socket_last_error(); $errormsg = socket
thx和ADVICES,您应该通过循环接收响应
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;
Which是您希望接收的数据的大小(以字节为单位)?这里的第一步是查看协议规范,以了解。
strlen()
不会获得$buf
的最大大小,而是获取当前位于$buf
中的数据的大小。这是什么类型的套接字,流还是数据报?@Barmar stream$sock=socket\u create(AF\u INET,sock\u stream,0)您需要在循环中调用socket\u recv()
,直到获得所有内容。除非应用程序协议指定了特定的消息大小,否则它可以是任意长度。@Barmar它可以是任意长度,从1到缓冲区大小。这是字节流协议,不是消息协议。应用程序消息大小与此无关。
$received;
while(socket_recv($sock, $buf, 1024, 0) >= 1)
{
$received .= $buf;
}