python没有连接到本地XMPP服务器

Posted

技术标签:

【中文标题】python没有连接到本地XMPP服务器【英文标题】:python does not connect to local XMPP server 【发布时间】:2012-09-11 10:50:28 【问题描述】:

我正在尝试通过下面的代码连接我的本地 XMPP 服务器

import xmpp
client = xmpp.Client('localhost',debug=[])
client.connect(server=('localhost',5222))

但我总是收到这条消息:

查找 _xmpp-client._tcp.localhost 时出错

我已经检查了端口 5222 是否已经打开(通过使用 telnet)。 (我不得不提到本地主机上的防火墙已关闭) 现在我应该在这段代码中添加什么以使其正常工作?

【问题讨论】:

我以前用过linkSleekXMPP 来做这种事情,如果你不能让它工作,可能值得一看,SleekXMPP 有很好的工作示例记录。 你确定这不仅仅是一个警告吗?您可能实际上已连接。 因为它不工作 【参考方案1】:

此消息(警告,而不是 xinox 的回答中指出的错误)表明 DNS SRV 记录查找失败。 DNS SRV 记录用于查找与某个域相关联的服务(例如,localhost 在这种情况下,因此根本不是一个域,这就是查找失败的原因),但它们将它们的责任委托给一个服务器其他地方。

例如,如果我有一个位于example.net 的服务器,我的 Jabber ID (JID) 为:user@example.net,但我的 XMPP 服务器位于 chat.example.net,我可以在 example.net 上构造一条 SRV 记录以指向chat.example.net。还有其他方式来委派责任,但这是首选方式。 XMPP 对 SRV 记录的使用在 RFC 6120 §3.2.1 中定义。

要真正消除此错误,您可以使用use_srv kwarg,作为您的初始示例:

import xmpp
client = xmpp.Client('localhost',debug=[])
client.connect(server=('localhost',5222), use_srv=False)

【讨论】:

请注意,SRV 不是 XMPP 工作所必需的(例如,如果您的服务器和帐户位于同一域中),但无论如何都会产生此警告。 是的,这就是为什么它是警告而不是错误的原因(尽管我个人认为警告是浪费时间,根本不应该记录,因为它们本质上表明“没有出错,一切都是好”)【参考方案2】:

使用这个。

client = xmpp.Client('127.0.0.1',debug=[])
client.connect(server=('127.0.0.1',5222))

或您的 IP 192.X.X.X

【讨论】:

以上是关于python没有连接到本地XMPP服务器的主要内容,如果未能解决你的问题,请参考以下文章

节点连接到本地主机中的 Xmpp 服务器

XMPP 连接到服务器(Python)

连接到 XMPP 服务器

在浏览器中使用 xmpp.js 连接到 XMPP 服务器

无法将 Android 客户端与本地 XMPP 服务器连接

如何使用 PHP 连接到 XMPP 服务器