我在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 。
我阅读了文档并完成了所有内容。这里的代码有什么问题吗?
答案 0 :(得分:0)
sudo apt-get update
sudo apt-get install nodejs
sudo apt-get install npm
查看幕后发生的事情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)
你应该尝试以下方法: -
ConnectionConfiguration.SecurityMode.disabled
或XMPPTCPConnectionConfiguration.SecurityMode.required
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的操作系统进行测试。