Java Smack XMPP-连接不再连接。完成=真SMResumption可能=假
我正在使用SmackJava库(版本4.3.1)(JDK8)。经过一段随机时间后,我有时会出现以下异常。有什么办法可以避免吗Java Smack XMPP-连接不再连接。完成=真SMResumption可能=假,java,xmpp,ejabberd,smack,Java,Xmpp,Ejabberd,Smack,我正在使用SmackJava库(版本4.3.1)(JDK8)。经过一段随机时间后,我有时会出现以下异常。有什么办法可以避免吗 org.jivesoftware.smack.SmackException$NotConnectedException: The connection [...] (117) is no longer connected. done=true smResumptionPossible=false at org.jivesoftware.smack.tcp.XMPPTCPC
org.jivesoftware.smack.SmackException$NotConnectedException: The connection [...] (117) is no longer connected. done=true smResumptionPossible=false at
org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketWriter.throwNotConnectedExceptionIfDoneAndResumptionNotPossible(XMPPTCPConnection.java:1320) at
org.jivesoftware.smack.tcp.XMPPTCPConnection.throwNotConnectedExceptionIfAppropriate(XMPPTCPConnection.java:359) at
org.jivesoftware.smack.AbstractXMPPConnection.sendStanza(AbstractXMPPConnection.java:688)
XMPPTCPConnectionConfiguration:
XMPPTCPConnectionConfiguration.builder(
).setSecurityMode(
ConnectionConfiguration.SecurityMode.disabled
).setXmppDomain(
this.domain
).setHostAddress(
InetAddress.getByName(
this.host
)
)
.allowEmptyOrNullUsernames(
).performSaslAnonymousAuthentication(
).build();
XMPPTCP连接:
conn.setReplyTimeout(30 * 1000);
conn.setUseStreamManagement(true);
conn.setUseStreamManagementResumption(true);
conn.connect();
conn.login();
Maven中心工件:
<artifactId>smack-core</artifactId>
<version>4.3.1</version>
<artifactId>smack-tcp</artifactId>
<version>4.3.1</version>
<artifactId>smack-extensions</artifactId>
<version>4.3.1</version>
<artifactId>smack-java7</artifactId>
<version>4.3.1</version>
<artifactId>smack-resolver-dnsjava</artifactId>
<version>4.3.1</version>
smackcore
4.3.1
smack tcp
4.3.1
smack扩展
4.3.1
smack-java7
4.3.1
smack分解器dnsjava
4.3.1
其他信息:
问题是,
conn.isConnected
返回true。在内部,在发送节(conn.sendStanza
)之前,Smack执行以下检查:如果(conn.isConnected
),那么如果(conn.issmresumption可能
)那么sendStanza()。如果conn.issmresumptionmable()
返回false,则会引发我得到的异常。安装连接侦听器,并在侦听器的回调通知您连接已断开时重新连接。以下是帮助我缓解此问题的方法:
final XMPPTCPConnection conn = new XMPPTCPConnection(config);
conn.setReplyTimeout(30_000);
conn.setUseStreamManagement(true);
conn.setUseStreamManagementResumption(true);
conn.setPreferredResumptionTime(5);
ReconnectionManager.getInstanceFor(conn).enableAutomaticReconnection();
PingManager.getInstanceFor(conn).setPingInterval(60);
我有这个想法。问题是conn.isConnected返回true。在发送节(conn.sendStanza)之前,Smack在内部执行以下检查:如果(conn.isConnected)那么如果(conn.issmresumption)那么发送节。如果conn.issmresumptionmable返回false,则抛出我得到的异常。不,没有发生这种情况。您缺少调用done()
,调用done()
的thrownotconnectedExceptionIfdoneandResumptionNotable()
。能否详细说明done()
的作用以及它如何影响连接?connectionClosed()
侦听器方法仅通过手动调用disconnect()
方法调用。(如果我错了,请纠正我)那么,我应该改用connectionClosedOnError()
listener方法吗?你找到解决方法了吗?@HKumar See my你找到解决方法了吗?@alla See my.它不起作用。我应用了与您描述的相同的设置。我正在android应用程序中使用smack 4.3.4版。{SocketTimeoutException@14486}“java.net.SocketTimeoutException:30000ms后无法连接到msgsvc.panetny.com/64:ff9b::43d6:812c(端口5222)from/2402:3a80:86f:235f:c9dd:2897:8728:7e54(端口42758)”我已经检查了防火墙、防病毒等一切,但没有运气。我可以连接windows 10中的Spark应用程序,但连接成功,但无法连接android smack library。如果您找到任何解决方案,请共享示例代码。