Java Android xmpp错误主机未知

Java Android xmpp错误主机未知,java,android,xmpp,smack,Java,Android,Xmpp,Smack,我正在尝试连接到xmpp服务器,这会返回此错误 W/AbstractXMPPConnection:连接已关闭,但出现错误 org.jivesoftware.smack.XMPPException$StreamErrorException:host unknown您可以阅读有关此流错误含义的更多信息 在 位于org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:10

我正在尝试连接到xmpp服务器,这会返回此错误

W/AbstractXMPPConnection:连接已关闭,但出现错误 org.jivesoftware.smack.XMPPException$StreamErrorException:host unknown您可以阅读有关此流错误含义的更多信息 在 位于org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1003) 位于org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$300(XMPPTCPConnection.java:944) 位于org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:959) 运行(Thread.java:818)

我试着用这个例子,并把这些数据

private static final String DOMAIN = "10.20.0.125"; 

private static final String HOST = "10.20.0.125"; 

private static final int PORT = 5222;

private String userName ="admin2@localhost";

private String passWord = "asdfasdf";
服务器正常,我们进行了另一台测试pc在android上进行通信,但此错误仍然存在。

我发现主要有两个错误:

在演示配置中,您有以下代码行:

XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder();
    configBuilder.setUsernameAndPassword(userName, passWord);
    configBuilder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
    configBuilder.setResource("Android");
    configBuilder.setServiceName(DOMAIN);
    configBuilder.setHost(HOST);
    configBuilder.setPort(PORT);
第一个问题(主要问题): 域变量应该(但必须)是您可以在服务器配置中读取的服务器名称,而不仅仅是IP;某些功能将在本地主机之外中断

第二个问题: 虽然我建议从配置中分离登录(因此只需配置连接,然后登录),但我没有得到用户名:localhost将不会在服务器计算机外部解析,因此必须用域名替换(理论上,即使连接将为用户提供其域,也不需要如此明确)

因此:

将被替换为

 connection.connect();
 login(userName ,passWord,"Android" );
您需要删除这两行:

configBuilder.setResource("Android");
configBuilder.setUsernameAndPassword(userName, passWord);
关于域名:您可以在服务器配置中找到它,在Openfire中,它是您可以在服务器信息页面的web界面中读取的“服务器名称”。

我主要看到两个错误:

在演示配置中,您有以下代码行:

XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder();
    configBuilder.setUsernameAndPassword(userName, passWord);
    configBuilder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
    configBuilder.setResource("Android");
    configBuilder.setServiceName(DOMAIN);
    configBuilder.setHost(HOST);
    configBuilder.setPort(PORT);
第一个问题(主要问题): 域变量应该(但必须)是您可以在服务器配置中读取的服务器名称,而不仅仅是IP;某些功能将在本地主机之外中断

第二个问题: 虽然我建议从配置中分离登录(因此只需配置连接,然后登录),但我没有得到用户名:localhost将不会在服务器计算机外部解析,因此必须用域名替换(理论上,即使连接将为用户提供其域,也不需要如此明确)

因此:

将被替换为

 connection.connect();
 login(userName ,passWord,"Android" );
您需要删除这两行:

configBuilder.setResource("Android");
configBuilder.setUsernameAndPassword(userName, passWord);

关于域名:您可以在服务器配置中找到它,在Openfire中,它是您可以在服务器信息页面的web界面中读取的“服务器名称”。

我设法找到了解决方案。 我使用的是.jar文件,而不是编译gradle依赖项:

compile 'org.igniterealtime.smack:smack-android:4.1.4'
compile 'org.igniterealtime.smack:smack-tcp:4.1.4'
compile 'org.igniterealtime.smack:smack-im:4.1.4'
compile 'org.igniterealtime.smack:smack-extensions:4.1.4'

因此,错误已被解决。感谢您的帮助。

我设法找到了解决方案。 我使用的是.jar文件,而不是编译gradle依赖项:

compile 'org.igniterealtime.smack:smack-android:4.1.4'
compile 'org.igniterealtime.smack:smack-tcp:4.1.4'
compile 'org.igniterealtime.smack:smack-im:4.1.4'
compile 'org.igniterealtime.smack:smack-extensions:4.1.4'

因此,错误已被解决。感谢您的帮助。

我做了必要的更改,但在执行连接时出现以下错误。登录(LoginUser、passwordUser、RESOURCE_TYPE):登录:java.lang.NullPointerException:尝试调用接口方法'byte[]空对象引用上的org.jivesoftware.smack.util.stringencoder.Base64$Encoder.encode(byte[],int,int)““资源类型”的值是多少?您是否在服务器上注册了您的用户?但是我认为这是另一个问题…我认为不需要新的票证。因为在执行提供的修改时出现了此错误!但是指定了资源类型(例如“Android”),以防万一在登录中删除以进行新测试,问题仍然存在。如您所愿,但至少对我来说,很难使用不再是原始问题中的代码和尚未完全粘贴的新stacktrace进行后续操作。我进行了必要的更改,但在执行连接时出现以下错误。登录(LoginUser,passwordUser,RESOURCE_TYPE):login:java.lang.NullPointerException:尝试在空对象引用上调用接口方法“byte[]org.jivesoftware.smack.util.stringencoder.Base64$Encoder.encode(byte[],int,int)”“RESOURCE_TYPE”的值是多少?您是否在服务器上注册了您的用户?但是我认为这是另一个问题…我认为不需要新的票证。因为在执行提供的修改时出现了此错误!但是指定了资源类型(例如“Android”),以防万一在登录时删除以进行新测试,问题仍然存在。如您所愿,但至少对我来说,很难使用不再是原始问题中的代码和尚未完全粘贴的新stacktrace。