使用 xmpp 在 muc 中创建空间时出错

Posted

技术标签:

【中文标题】使用 xmpp 在 muc 中创建空间时出错【英文标题】:error while creating room in muc using xmpp 【发布时间】:2016-01-22 06:41:48 【问题描述】:

我正在使用 smack 库使用 android 应用程序创建房间。

以下是使用 muc 创建群聊(房间)的代码:

MultiUserChatManager manager = MultiUserChatManager.getInstanceFor(connection);
muc = manager.getMultiUserChat("myroom@conference.192.168.1.4");
muc.create("myroom");
muc.sendConfigurationForm(new Form(DataForm.Type.submit));

以下是在 MUC 中执行上述命令创建组时的日志:

<presence to='myroom@conference.192.168.1.4/myroom' id='wvAb9-11'><x xmlns='http://jabber.org/protocol/muc'></x><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://www.igniterealtime.org/projects/smack' ver='NfJ3flI83zSdUDzCEICtbypursw='/></presence>

<presence type="error" xmlns="jabber:client" id="wvAb9-11" from="myroom@conference.192.168.1.4/myroom" to="dk@yama/Smack"><x xmlns="http://jabber.org/protocol/muc"/><c xmlns="http://jabber.org/protocol/caps" node="http://www.igniterealtime.org/projects/smack" hash="sha-1" ver="NfJ3flI83zSdUDzCEICtbypursw="/><error type="cancel" code="404"><remote-server-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/><text xml:lang="en" xmlns="urn:ietf:params:xml:ns:xmpp-stanzas">S2S - destination host not found</text></error></presence>

org.jivesoftware.smack.XMPPException$XMPPErrorException: XMPPError: remote-server-not-found - cancel
at org.jivesoftware.smack.PacketCollector.nextResultOrThrow(PacketCollector.java:232)

at org.jivesoftware.smackx.muc.MultiUserChat.enter(MultiUserChat.java:311)

at org.jivesoftware.smackx.muc.MultiUserChat.createOrJoin(MultiUserChat.java:400)

at org.jivesoftware.smackx.muc.MultiUserChat.createOrJoin(MultiUserChat.java:376)

<presence to='myroom@conference.192.168.1.4/myroom' id='wvAb9-11'><x xmlns='http://jabber.org/protocol/muc'></x><c xmlns='http://jabber.org/protocol/caps' hash='sha-1' node='http://www.igniterealtime.org/projects/smack' ver='NfJ3flI83zSdUDzCEICtbypursw='/></presence>

<presence type="error" xmlns="jabber:client" id="wvAb9-11" from="myroom@conference.192.168.1.4/myroom" to="dk@yama/Smack"><x xmlns="http://jabber.org/protocol/muc"/><c xmlns="http://jabber.org/protocol/caps" node="http://www.igniterealtime.org/projects/smack" hash="sha-1" ver="NfJ3flI83zSdUDzCEICtbypursw="/><error type="cancel" code="404"><remote-server-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/><text xml:lang="en" xmlns="urn:ietf:params:xml:ns:xmpp-stanzas">S2S - destination host not found</text></error></presence>

org.jivesoftware.smack.XMPPException$XMPPErrorException: XMPPError: remote-server-not-found - cancel

at org.jivesoftware.smack.PacketCollector.nextResultOrThrow(PacketCollector.java:232)

at org.jivesoftware.smackx.muc.MultiUserChat.enter(MultiUserChat.java:311)

at org.jivesoftware.smackx.muc.MultiUserChat.createOrJoin(MultiUserChat.java:400)

at org.jivesoftware.smackx.muc.MultiUserChat.createOrJoin(MultiUserChat.java:376)

at org.jivesoftware.smackx.muc.MultiUserChat.create(MultiUserChat.java:354)

at com.example.sufalam.tigasechatdemo.UserListActivity$3.onClick(UserListActivity.java:72)

at android.view.View.performClick(View.java:4780)

at android.view.View$PerformClick.run(View.java:19866)

at android.os.Handler.handleCallback(Handler.java:739)

at android.os.Handler.dispatchMessage(Handler.java:95)

at android.os.Looper.loop(Looper.java:135)

at android.app.ActivityThread.main(ActivityThread.java:5254)

at java.lang.reflect.Method.invoke(Native Method)

at java.lang.reflect.Method.invoke(Method.java:372)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)at org.jivesoftware.smackx.muc.MultiUserChat.create(MultiUserChat.java:354)

at com.example.sufalam.tigasechatdemo.UserListActivity$3.onClick(UserListActivity.java:72)

at android.view.View.performClick(View.java:4780)

at android.view.View$PerformClick.run(View.java:19866)

at android.os.Handler.handleCallback(Handler.java:739)

at android.os.Handler.dispatchMessage(Handler.java:95)

at android.os.Looper.loop(Looper.java:135)

at android.app.ActivityThread.main(ActivityThread.java:5254)

at java.lang.reflect.Method.invoke(Native Method)

at java.lang.reflect.Method.invoke(Method.java:372)

at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)

at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

【问题讨论】:

【参考方案1】:

您尝试在会议服务器 conference.192.168.1.4 上创建房间 myroom,但作为回报,您会收到 remote-server-not-found 错误。

服务器名称conference.192.168.1.4 看起来很奇怪,因为它是主机名和 IP 地址的混合体。您需要通过检查其配置或通过performing an "items" service discovery request(如果会议服务器作为您要连接的服务器的组件运行)来确定实际调用的会议服务器。

我不熟悉 Tigase,但它的 MUC 服务似乎来自 separate component。您可能需要检查它是否已正确安装和启动。

【讨论】:

谢谢@legoscia ..我没有主机名和IP地址的混合......我们可以使用主机的IP地址或它自己的主机名...... 嗨@legosia 我遇到了同样的问题,但无法找到请帮助我 注意:我可以通过服务器名称创建:conference.IP_ADDRESS 我正在使用 android smack 客户端作为 ejabbered 服务器。【参考方案2】:

要创建房间,请在您的电脑中安装 spark 并使用 openfire 用户帐户登录,然后从那里创建房间,您将获得

你的房间名@coneference.storege

在我的情况下,我得到了这个。所以现在我尝试通过我的应用程序创建房间并将服务器名称命名为

coneference.storege

和组名。我的组创建成功。创建房间时请不要提供IP地址。

【讨论】:

以上是关于使用 xmpp 在 muc 中创建空间时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用 smack 创建 MUC

使用 aSmack 为 XMPP 群聊创建 MUC 房间时出现 ClassCastException

使用 Xmpp、strophe.js 进行聊天应用

如何使用 asmack 在 android 中创建多用户聊天应用程序

如何使用 PHP 在 openfire 中创建聊天室并将用户添加到房间中

如何在 Ejabberd 中创建非匿名房间 [关闭]