套接字 PHP 挂在 fgets 上

发布于 2024-11-03 09:43:19 字数 526 浏览 0 评论 0原文

我有 JAVA 中的服务器和客户端应用程序,与该服务器一起使用。乍一看,这没有问题 - JAVA 使用 socket.getInputStream() 接收数据,使用 socket.getOutputStream() 发送数据。

我需要在 PHP 上编写相同的客户端。手册中的所有示例都没有帮助我。我可以成功连接到服务器,但是当我尝试读取某些内容时 - 页面挂起。例如:

$fp = stream_socket_client($addr, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    fwrite($fp, $data);
    while (!feof($fp)) {
        var_dump(fgets($fp, 1024));
    }
    fclose($fp);
}

即使没有 while,此代码也会挂起。

有什么问题吗?

I have server and client application in JAVA, what working with this server. On first look, it's no problems - JAVA uses socket.getInputStream() for receiving data and socket.getOutputStream() for sending data.

I need to write same client on PHP. All examples from manuals didn't help me. I can succesfully connect to server, but when i trying to read something - page hangs. For example:

$fp = stream_socket_client($addr, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    fwrite($fp, $data);
    while (!feof($fp)) {
        var_dump(fgets($fp, 1024));
    }
    fclose($fp);
}

This code hangs even without while.

What can be wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

北斗星光 2024-11-10 09:43:19

你的服务器真的发送字节吗?

fgets($fp, 1024)

如果发生以下情况之一,则返回:

- 收到 EOF 或换行符

- 读取 1024-1 字节

远端关闭了连接

如果这些条件没有发生,调用就会阻塞。

将 1024 更改为较小的数字或使用 fgetc() 怎么样?

Does your server really send bytes?

fgets($fp, 1024)

returns, if one of these conditions happens:

- EOF or newline received

- 1024-1 bytes read

or the far side closed the connection.

If these conditions do not happen, the call blocks.

How about changing 1024 to a lower number or use fgetc()?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文