PHP_NORMAL_READ切断正在发送的数据

时间:2014-11-17 12:28:52

标签: php sockets

我需要一些帮助,我在读取设备通过socket发送的二进制数据时遇到问题。我无法接收发送的确切数据。我正在使用此代码

$data = @socket_read($read_sock,2048,PHP_NORMAL_READ);

我正在使用PHP_NORMAL_READ因为它将停止阅读" \ r \ n"。

但是当我收到时,数据不准确,它只接收很少的二进制数据。

1 个答案:

答案 0 :(得分:1)

length参数指定将从流中读取的最大长度。 PHP文档在这个问题上有点误导,但我认为这意味着,你会得到:

  • 小于或完全'长度'字节
  • 至少一个字节
  • 响应中没有'\ r'或'\ n',除非它是唯一的字符

您遇到的大多数Socket API都以这种方式工作,它们可能比您请求的字节数少,因为可能没有更多的字节可用,并且数据可能会以比设备发送的更小的部分到达。解决方案是从套接字中重复读取,直到你得到你想要的东西(这意味着直到你的字符串以换行符结束,在你的情况下)。

您还可以咨询http://php.net/manual/en/function.socket-read.php,其中评论者建议在与PHP_NORMAL_READ一起使用时函数有些错误。可能值得为支持readLine的PHP搜索一些套接字库。