Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在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 - Fatal编程技术网

如何在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中获取此函数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

从上面的函数中,它不显示完整消息,所以我尝试获得变量$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_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;
}