套接字 PHP 挂在 fgets 上
我有 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你的服务器真的发送字节吗?
如果发生以下情况之一,则返回:
- 收到 EOF 或换行符
- 读取 1024-1 字节
或远端关闭了连接。
如果这些条件没有发生,调用就会阻塞。
将 1024 更改为较小的数字或使用 fgetc() 怎么样?
Does your server really send bytes?
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()?