【问题标题】:how to get maximum length of this function socket_recv() in PHP如何在 PHP 中获取此函数 socket_recv() 的最大长度
【发布时间】: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 到缓冲区大小。它是字节流协议,而不是消息协议。应用程序消息大小与此无关。

标签: php sockets


【解决方案1】:

您应该收到带有循环的响应

$received;
while(socket_recv($sock, $buf, 1024, 0) >= 1)
{
    $received .= $buf;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-23
    • 1970-01-01
    • 1970-01-01
    • 2011-04-29
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多