【问题标题】:Problem creating a chat room with XMPP in an iOS app在 iOS 应用中使用 XMPP 创建聊天室时出现问题
【发布时间】:2011-09-19 06:20:16
【问题描述】:

我有一个 iPhone 应用程序,我想在其中使用聊天室。我已经安装了 XMPP 服务器 (ejabberd) 并从 google 代码 (http://code.google.com/p/xmppframework/) 下载了适用于 iOS 的 XMPP 框架。服务器和客户端按预期工作,因为我能够登录并在两个用户之间发送聊天消息。

但是,当我尝试使用 XMPPRoom 类(在 XEP-0045 中)的 createOrJoinRoom 方法创建聊天室时,我没有收到来自服务器的任何回复,也没有创建聊天室。

我已经调试过,看看是什么类型的包被发送到服务器,它看起来像这样:

<presence from="test2@beta.bogus.net/mynick" to="muumit15@conference.beta.bogus.net">
  <x xmlns="http://jabber.org/protocol/muc"/>
</presence>

我没有收到任何错误消息,但未创建聊天室 (muumit15)。同时我可以使用例如Adium 客户端创建聊天室并成功。服务器已经过配置,因此每个用户都有权创建聊天室。

有什么想法吗?我什至尝试嗅探 Adium 客户端发送的 TCP/IP 流量,但它是加密/压缩/二进制的,所以我看不到它正在发送什么样的包。

【问题讨论】:

标签: iphone xmpp chatroom


【解决方案1】:

参见7.2.2 of XEP-0045 部分,尤其是示例 18:

<presence
    from='hag66@shakespeare.lit/pda'
    to='coven@chat.shakespeare.lit/thirdwitch'>
  <x xmlns='http://jabber.org/protocol/muc'/>
</presence>

请注意,to 地址必须包含资源,而您的地址不包含。资源是/ 后面的字符串,用作房间中的昵称。有关 XMPP 地址格式的更多信息,请参阅RFC 6122

【讨论】:

  • 感谢您的澄清,但我也尝试了这些组合(即在两者上都有 nick,没有,任何一个),但这无济于事。
  • 您不必输入发件人地址。服务器会为你做这件事。当它这样做时,发件人地址将有一个资源。目标地址必须有资源。尝试使用现有客户端加入房间,并观察它使用的协议。
  • 我检查了服务器日志,当 Adium 成功创建房间时,它发送了如下消息:jabber.org/protocol/muc'/></presence> 但是,当我发送相同的消息时,没有创建房间。 To 字段必须具有的“资源”是什么意思?资源!= 昵称?
  • 我只是重读了我原来的答案,并没有多大意义。重写以希望更清楚地了解资源是什么。 XEP-115 (xmpp.org/extensions/xep-0115.html) 上限信息与您是否成功加入会议室无关。
猜你喜欢
  • 2015-06-14
  • 2012-12-19
  • 1970-01-01
  • 2014-06-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多