PHP 无法连接到端口 5222 上的 localhost XMPP 服务器

Posted

技术标签:

【中文标题】PHP 无法连接到端口 5222 上的 localhost XMPP 服务器【英文标题】:PHP can't connect to localhost XMPP server on port 5222 【发布时间】:2010-04-05 23:32:27 【问题描述】:

我已经在我的 Windows 机器上本地安装了 ejabberd,我还安装了 Apache、phpmysql。我还确认它使用 Digsby 效果很好,并且通过创建一些用户、发送一些消息等方式进行了一些改进。一切都很好。

但是,PHP 无法使用 stream_socket_client 将流打开到端口 5222。即使在最简单的级别:

stream_socket_client("tcp://localhost:5222", $errno, $errstr, 30, STREAM_CLIENT_CONNECT);

返回超时错误。但是,再次使用 IM 客户端连接到端口 5222 上的 localhost 可以正常工作。 (使用 stream_socket_client 在端口 80 上打开到 localhost 的简单连接也可以。)

有什么想法吗?我被困住了!

【问题讨论】:

您 1) 检查错误信息是什么? 2)检查服务器是否正在运行,即在本地主机上? 是的,错误消息只是说连接超时:“连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败,因为连接的主机没有响应。”正如我上面所说,服务器正在运行并且可以从标准 IM 客户端连接。 【参考方案1】:

selinux 需要关闭,或者允许 apache 与 xmpp 对话

【讨论】:

【参考方案2】:

许多服务器默认不监听环回设备,或者只监听 ::1 或 127.0.0.1 并让 localhost 指向另一个。做检查:

% netstat -an | grep 5222

并检查输出中的 LISTEN 行,该行显示您的服务器正在侦听的位置。

最后,尝试使用您的盒子的 IP 地址明确作为连接主机名。

【讨论】:

【参考方案3】:

有时您只需要在线上偷看一下就可以知道到底发生了什么。 Windump(tcpdump) 在这些情况下是你的朋友。

【讨论】:

以上是关于PHP 无法连接到端口 5222 上的 localhost XMPP 服务器的主要内容,如果未能解决你的问题,请参考以下文章

Asmack 18 连接:google.com:5222 异常:无法连接到 talk.google.com 远程服务器超时

Windows 10 上的 RabbitMQ - 无法连接到 epmd:地址(无法连接到主机/端口)

无法连接到端口,但 php 中的 80

无法连接到端口 5432 上的 Postgresql

使用 XAMPP 连接到端口 3306 mysql 工作台的问题

无法连接到端口 8080 上的 EC2 Windows 实例