我需要一些帮助,我在读取设备通过套接字发送的二进制数据时遇到问题。我无法接收发送的确切数据。我正在使用此代码
$data = @socket_read($read_sock,2048,PHP_NORMAL_READ);
我正在使用PHP_NORMAL_READ,因为它将停止使用此“\r\n”读取。
但是,当我收到数据时,它的数据并不准确,只能接收很少的二进制数据。
最佳答案
length参数指定将从流中读取的最大长度。 PHP文档对此主题有点误导,但是我认为这意味着,您将获得:
您遇到的大多数Socket API都是以这种方式工作的,它们给您的字节数可能少于请求的字节数,因为可能无法使用更多的字节,并且数据到达的部分可能比设备发送它们的部分少。解决方案是从重复执行socket,直到获得所需的内容为止(这意味着直到获得以换行符结尾的字符串为止)。
您可能还想查询http://php.net/manual/en/function.socket-read.php,其中的注释者建议将这些函数与PHP_NORMAL_READ一起使用时,存在一些错误。为支持readLine的PHP寻找一些套接字库可能是值得的。
关于php - PHP_NORMAL_READ切断正在发送的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26972750/