使用Smack的Quickblox的XMPP客户端

使用Smack的Quickblox的XMPP客户端,xmpp,smack,quickblox,Xmpp,Smack,Quickblox,我正在尝试编写一个XMPP客户端来连接到Quickblox,并将其用作聊天应用程序的bot。我使用Smack 4.1.3来实现这个目的。这是我的密码: public static void sendChat1() { XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder() .setUsernameAndPassword("4461610-26179", "p

我正在尝试编写一个XMPP客户端来连接到Quickblox,并将其用作聊天应用程序的bot。我使用Smack 4.1.3来实现这个目的。这是我的密码:

public static void sendChat1() {

    XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder()
            .setUsernameAndPassword("4461610-26179", "pass")
            .setServiceName("chat.quickblox.com")
            .setPort(5222)
            .build();

    System.out.println("Establishing Connection");
    AbstractXMPPConnection conn2 = new XMPPTCPConnection(config);
    try {
        conn2.connect();
    } catch (SmackException e) {
        System.out.println("ERROR");
        e.printStackTrace();
    } catch (IOException e) {
        System.out.println("ERROR");
        e.printStackTrace();
    } catch (XMPPException e) {
        System.out.println("ERROR");
        e.printStackTrace();
    }



    MultiUserChatManager manager = MultiUserChatManager.getInstanceFor(conn2);

    System.out.println("Creating multi user chat room");
    MultiUserChat muc = manager.getMultiUserChat("26179_55b76303535c12544b00b550@muc.chat.quickblox.com");

    System.out.println("Joining chat room");
    try {
        muc.join("4461610");
    } catch (XMPPException.XMPPErrorException e) {
        System.out.println("ERROR");
        e.printStackTrace();
        return;
    } catch (SmackException e) {
        System.out.println("ERROR");
        e.printStackTrace();
        return;
    }

    System.out.println("Chat room request");
    try {
        muc.sendConfigurationForm(new Form(DataForm.Type.submit));
    } catch (SmackException.NoResponseException e) {
        System.out.println("ERROR");
        e.printStackTrace();
    } catch (XMPPException.XMPPErrorException e) {
        System.out.println("ERROR");
        e.printStackTrace();
    } catch (SmackException.NotConnectedException e) {
        System.out.println("ERROR");
        e.printStackTrace();
    }
}

    public static void main(String[] args) {
        sendChat1();
    }
由于某些原因,我无法使客户端使用MultiUserChat连接到聊天室。下面是我运行此代码时的输出:

Establishing Connection
Creating multi user chat room
Joining chat room
ERROR
org.jivesoftware.smack.XMPPException$XMPPErrorException: XMPPError: not-authorized - auth
at                       org.jivesoftware.smack.XMPPException$XMPPErrorException.ifHasErrorThenThrow(XMPPException.java:135)
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.join(MultiUserChat.java:495)
at org.jivesoftware.smackx.muc.MultiUserChat.join(MultiUserChat.java:430)
at Main.sendChat1(Main.java:53)
at Main.main(Main.java:80)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Jul 29, 2015 12:52:36 AM org.jivesoftware.smack.roster.Roster$PresencePacketListener processPacket
WARNING: Roster not loaded while processing presence stanza

Process finished with exit code 0
我打开了调试,发现如下情况:

Establishing Connection
01:28:55 AM SENT (0): <stream:stream xmlns='jabber:client' to='chat.quickblox.com' xmlns:stream='http://etherx.jabber.org/streams' version='1.0' from='4461610-26179@chat.quickblox.com@chat.quickblox.com' xml:lang='en'>
01:28:56 AM RECV (0): <?xml version='1.0'?><stream:stream xmlns='jabber:client' xmlns:stream='http://etherx.jabber.org/streams' id='tigase-error-tigase' from='chat.quickblox.com' version='1.0' xml:lang='en'><stream:error><improper-addressing xmlns='urn:ietf:params:xml:ns:xmpp-streams'/></stream:error></stream:stream>
建立连接
凌晨01:28:55发送(0):
01:28:56上午录制(0):
quickblox上的应用程序配置似乎也正确。我已经创建了一个在此应用程序中使用的用户。我还创建了一个公共对话,也在这个应用程序中使用。不知道这里发生了什么


顺便说一句,我不能使用Quickblox提供的SDK,因为我必须在基于java框架构建的web服务器上部署此代码。

不正确的寻址错误说明了它的意思

这个jid很奇怪4461610-26179@chat.quickblox.com@chat.quickblox.com

应该是4461610-26179@chat.quickblox.com

这就是您收到此错误的原因


我看不出您的代码中存在这方面的问题,无论如何,请检查这种可能性

不正确的寻址错误说明了它的意思

这个jid很奇怪4461610-26179@chat.quickblox.com@chat.quickblox.com

应该是4461610-26179@chat.quickblox.com

这就是您收到此错误的原因


我看不出你的代码中有什么问题,无论如何,请检查这种可能性

我有类似的问题,即使我更新到QB 3.0,当我的花名册未连接时,它开始接收Smack状态数据包,并显示W/花名册:花名册在处理状态节时未加载,随后它崩溃并出现错误:java.lang.NullPointerException:尝试调用虚拟方法'int java.lang.String.indexOf(int)'在org.jxmpp.util.XmppStringUtils.parseBareJid(XmppStringUtils.java:124)的空对象引用上,我遇到了类似的问题,即使我更新到QB 3.0,当我的花名册未连接时,它开始接收Smack状态数据包,并显示W/花名册:花名册在处理状态节时未加载,随后它崩溃并出现错误:java.lang.NullPointerException:尝试调用虚拟方法'int java.lang.String.indexOf(int)'在org.jxmpp.util.XmppStringUtils.parseBareJid(XmppStringUtils.java:124)上的空对象引用上