我使用Ejabberd实现了新的Smack 4.2如果我没有登录或注册,我会在连接时关闭连接,因为我想在登录或注册之前创建连接。相同的代码在Openfire服务器上运行良好。
创建连接后,我在几秒钟(接近30秒)内收到此错误。 连接XMPPTCPConnection [未验证](0)因错误而关闭 org.jivesoftware.smack.XMPPException $ StreamErrorException:connection-timeout您可以在http://xmpp.org/rfcs/rfc6120.html#streams-error-conditions了解有关此流错误含义的更多信息
在重新连接时,它会因此错误而崩溃
致命异常:Smack Reconnection Manager(0)java.lang.IllegalArgumentException:用户名不能为null或为空 在org.jivesoftware.smack.util.StringUtils.requireNotNullOrEmpty(StringUtils.java:468) 在org.jivesoftware.smack.AbstractXMPPConnection.login(AbstractXMPPConnection.java:484) 在org.jivesoftware.smack.AbstractXMPPConnection.login(AbstractXMPPConnection.java:448) 在org.jivesoftware.smack.ReconnectionManager $ 2.run(ReconnectionManager.java:254) 在java.lang.Thread.run(Thread.java:818)
一些配置代码行
if (connection == null || !connection.isConnected()) {
XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration
.builder();
config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
DomainBareJid serviceName = JidCreate.domainBareFrom(Constants.SERVER_NAME);
config.setServiceName(serviceName);
InetAddress inetAddress = InetAddress.getByName(Constants.HOST);
config.setXmppDomain(Constants.SERVER_NAME);
config.setHostAddress(inetAddress);
config.setHost(Constants.HOST);
config.setPort(Constants.PORT);
config.setResource(Constants.RESOURCE);
config.setDebuggerEnabled(true);
SASLAuthentication.blacklistSASLMechanism("PLAIN");
SASLAuthentication.blacklistSASLMechanism("DIGEST-MD5");
SASLAuthentication.unBlacklistSASLMechanism("SCRAM-SHA-1");
XMPPTCPConnection.setUseStreamManagementDefault(true);
connection = new XMPPTCPConnection(config.build());
initializingMessageReceivedListeners();
enableReConnection();
connection.connect();
}
提前致谢。
答案 0 :(得分:0)
找到我自己的问题的解决方案Openfire允许创建连接,即使你没有登录但Ejabberd在几秒钟后中断但我们可以延迟这一次。