php - PHP_NORMAL_READ切断正在发送的数据

标签 php sockets

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

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

我正在使用PHP_NORMAL_READ,因为它将停止使用此“\r\n”读取。

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

最佳答案

length参数指定将从流中读取的最大长度。 PHP文档对此主题有点误导,但是我认为这意味着,您将获得:

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

  • 您遇到的大多数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/

    相关文章:

    php - Codeigniter 文件上传问题

    php - 多对多关系

    php 验证字符串是否为字母,包括西里尔字母、希腊字母或任何 unicode 字母

    c++ - 有没有办法强制 Windows 在套接字调用上产生短读/写?

    C++ irc​​ 服务器不发送 ping

    c# - UDP - 我可以发送两个数据报部分,并让接收端将它们合并为一个吗?

    javascript - 无法创建从 HTML 到本地主机的套接字连接

    php - 使用链接从数据库中删除值

    Android与C++套接字通信

    php - 使用 SQL 从不同表中搜索表单