Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Smack XMPP-连接不再连接。完成=真SMResumption可能=假_Java_Xmpp_Ejabberd_Smack - Fatal编程技术网

Java Smack XMPP-连接不再连接。完成=真SMResumption可能=假

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

我正在使用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.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。如果您找到任何解决方案,请共享示例代码。