如何区分用户的 JID 和 MUC 的 JID?

Posted

技术标签:

【中文标题】如何区分用户的 JID 和 MUC 的 JID?【英文标题】:How can I tell the difference between the JID of a user and a JID of MUC? 【发布时间】:2014-01-31 20:01:15 【问题描述】:

假设我有两个 JID:

JID 1:bob@example.com JID 2 room@chat.example.com

JID 2 显然是指聊天服务器,但聊天服务器中并不总是包含聊天或会议一词。

有没有办法使用 Smack 库来判断哪个是哪个?

【问题讨论】:

【参考方案1】:

您无法通过查看 JID 来判断。你必须在给定的协议交换中保留足够的上下文才能知道你在说什么。

通常在启动时,客户端会向服务器发送disco#items 查询:

<iq type='get'
    to='shakespeare.lit'
    id='items1'>
  <query xmlns='http://jabber.org/protocol/disco#items'/>
</iq>

要查找所有本地服务,然后向每个服务发送disco#info 查询以了解有关该服务的更多信息。一旦你find a MUC server:

<iq from='chat.shakespeare.lit'
    type='result'>
  <query xmlns='http://jabber.org/protocol/disco#info'>
    <identity
        category='conference'
        name='Shakespearean Chat Service'
        type='text'/>
    <feature var='http://jabber.org/protocol/muc'/>
  </query>
</iq>

您知道所有包含此域名的 JID(上例中为 chat.shakespeare.lit)都与 MUC 房间相关联。

【讨论】:

有什么方法可以通过发送某个 IQ 节来查看响应吗?【参考方案2】:

MUC 中的用户 JID 将(应该)在末尾有用户名,看起来像:

roomname@conference.example.com/username

【讨论】:

这将是用户在房间中的昵称,可能与他们的用户名不同。

以上是关于如何区分用户的 JID 和 MUC 的 JID?的主要内容,如果未能解决你的问题,请参考以下文章

是否有可能只有不同资源的 JID 加入同一个多用户聊天室

如何检查用户 JID 是不是已在 XMPPFrameWork 中使用

如何使用 smack 和 java 从 jid 到 jid?

我如何知道指定的 JID 是不是已经连接到服务器?

如何获取 XMPP IOS 框架的 JID

OpenFire 服务器中用户的 JID 应该是啥?