使用Android上的Smack API连接到localhost上的ejabberd XMPP服务器

时间:2016-02-20 09:49:49

标签: android localhost xmpp ejabberd smack

我在mac上本地安装了一个ejabberd XMPP服务器。我使用此代码在Android上使用Smack API进行连接和登录。

config = XMPPTCPConnectionConfiguration.builder()
                .setUsernameAndPassword("1@davids-macbook-pro.local", "1")
                .setHost("192.168.1.2")
                .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
                .setServiceName("192.168.1.2")
                .setPort(Integer.parseInt("5222"))
                .build();

        AbstractXMPPConnection conn2 = new XMPPTCPConnection(config);
        try {
            conn2.connect();
            conn2.login();
        } catch (SmackException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XMPPException e) {
            e.printStackTrace();
        }

使用相同的用户名和密码,我能够使用Adium等任何其他XMPP客户端登录,但上面的代码在android上出现此错误 -

  

连接因错误而关闭       org.jivesoftware.smack.XMPPException $ StreamErrorException:host-unknown

我的本​​地地址 192.168.1.2 ,ejabberd管理面板为 localhost:5280 / admin

我阅读了文档并完成了所有内容。这里的代码有什么问题吗?

5 个答案:

答案 0 :(得分:0)

  • 用户名应附加" @"
  • sudo apt-get update sudo apt-get install nodejs sudo apt-get install npm 查看幕后发生的事情
  • 将connect()和login()方法移至后台线程
  • 使用连接侦听器
  • 成功建立连接后调用login()
setDebuggerEnabled(true)

答案 1 :(得分:0)

我让它以这种方式连接并登录服务器 -

config = XMPPTCPConnectionConfiguration.builder()
                .setUsernameAndPassword("1", "1")
                .setHost("192.168.1.2")
                .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
                .setServiceName("davids-macbook-pro.local")
                .setPort(Integer.parseInt("5222"))
                .build();

        AbstractXMPPConnection conn2 = new XMPPTCPConnection(config);
        try {
            conn2.connect();
            conn2.login();
        } catch (SmackException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XMPPException e) {
            e.printStackTrace();
        }

答案 2 :(得分:0)

你应该尝试以下方法: -

  1. 尝试将您的端口更改为5280或尝试5227
  2. 检查您的服务器安全配置是否是必需的或可选的,因为您已将安全性设置为禁用
  3. 将连接侦听器添加到您的xmpp连接
  4. setDebugEnable(true)检查控制台中的smack日志并将日志添加到您的问题中,这将更清楚地询问究竟发生了什么
  5. 尝试使用ConnectionConfiguration.SecurityMode.disabledXMPPTCPConnectionConfiguration.SecurityMode.required
  6. 更改XMPPTCPConnectionConfiguration.SecurityMode.optional

答案 3 :(得分:0)

此代码应适用于4.2.4

XMPPTCPConnectionConfiguration conf = XMPPTCPConnectionConfiguration.builder()
            .setHostAddress(InetAddress.getByName("192.168.1.2"))
            .setUsernameAndPassword("1@davids-macbook-pro.local", "1")
            .setXmppDomain(JidCreate.domainBareFrom("localhost"))
            .setResource("Rooster")
            .setKeystoreType(null) 
            .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
            .setCompressionEnabled(true).build();

答案 4 :(得分:0)

将setHost()替换为setHostAddress()。我不知道为什么,但是Windows服务器上的Ejabberd为我提供了TimeOut。如果您在Windows上使用它,请同时使用基于Linux的操作系统进行测试。