【问题标题】:PHP socket_read will read at most 512 bytesPHP socket_read 最多读取 512 个字节
【发布时间】:2013-04-02 07:11:25
【问题描述】:
$input = socket_read($clients[$i]['socket'],2048);
$lent = strlen($input);
echo "\n\n$lent\n";
echo "\nDATA: ".$input."\n";

我实际要读取的数据长度>512。

有人可以帮帮我吗?

【问题讨论】:

  • 你怎么知道长度正好是2048字节?我自己不使用这种方法,但我知道如果您使用可变字节长度,您首先必须读取前 4 个(我相信)字节才能获得完整的数据包长度。
  • 我的数据的长度不是固定的,当我检查我的记录长度时它已经是 1361,因为我使用了 strlen 函数,但是当我使用时:socket_recv($clients[$i] ['socket'], $buff, 2048, MSG_WAITALL);我可以接收到我发送的所有数据,问题是我的socket_write函数,一旦我使用socket_recv它会提示错误..感谢回复..@j0k
  • 好的,所以您知道字节长度并使用 socket_read() 函数读取所有字节。但真正的问题是什么?是不是出错了?你没有得到任何输出或其他东西吗:)?
  • 我有一个输出但不完整,这真的是我的问题..数据被切割不完整..谢谢奔驰..
  • 啊,也许是来自多个套接字/连接的总字节数。如果您尝试使用 socket_read 函数创建一个循环会怎样?

标签: php sockets


【解决方案1】:

请看这个帖子:

Can't read from socket (hangs)

while($resp = socket_read($clients[$i]['socket'], 1000)) {
   $str .= $resp;
   if (strpos($str, "\n") !== false) break;
}
socket_close($sock);
die("Server said: $str");

这组代码循环,直到响应为空。

【讨论】:

    猜你喜欢
    • 2011-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多