【问题标题】:PHP socket programming socket_read + socket_write()PHP 套接字编程 socket_read + socket_write()
【发布时间】:2011-06-20 21:00:35
【问题描述】:

我有一个 PHP 套接字应用程序,它连接到服务器并发送一些数据,

我需要将此脚本扩展为发送(写入)收听返回以从服务器重播

我在socket_write() 之后尝试使用socket_read()

但它挂起脚本。

对此有什么想法吗?

【问题讨论】:

  • 这不是预期的状态吗?它应该阻塞,直到收到数据。
  • 其实我是从服务器发送消息
  • 你可以在这里找到一些 PHP 套接字代码:Writing Socket Servers in PHP
  • 确保您打开的套接字是全双工的,实际上是打开以读取数据,而不仅仅是发送数据。您应该显示更多代码,以便实际看到。
  • 什么是$file_bits?假设它是有效的,该代码将等到超时从套接字读取至少一个字节。

标签: php sockets


【解决方案1】:

socket_read() 正在阻塞。它挂起,直到有东西要读。此外,您需要反复调用它,直到它返回一个空字符串(连接您目前得到的内容),然后您才会给出完整的回复。

这就是套接字操作的工作原理:

socket_write($socket, 'request');
$response = '';
do {
    $buffer = socket_read($socket, $number_of_bytes_to_read);
    $response .= $buffer;
} while (!empty($buffer));

【讨论】:

  • 实际上是我从服务器发送消息,socket_read(没有读取它
  • @Sudantha,我不确定我理解你的意思。
【解决方案2】:

对于解决方法,在写入后添加sleep(1),然后开始阅读。

还要先检查写操作的返回值。确实返回写入的字节数,错误时返回 FALSE。

【讨论】:

  • 请不要加sleep(1)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-31
  • 2015-02-21
  • 1970-01-01
  • 1970-01-01
  • 2014-12-24
相关资源
最近更新 更多