1

我正在开发一个涉及 Quickblox 的 Android 应用程序。我不断收到消息“聊天连接已断开”。在阅读 logcat 后,这就是我得到的:

12-08 11:15:31.214 13894-14722/com.quickblox.sample W/AbstractXMPPConnection:连接因错误 java.net.SocketTimeoutException 关闭:在 com.android.org.conscrypt.NativeCrypto.SSL_read(本机方法)处读取超时在 com.android.org.conscrypt.OpenSSLSocketImpl$SSLInputStream.read(OpenSSLSocketImpl.java:705) 在 java.io.InputStreamReader.read(InputStreamReader.java:233) 在 java.io.BufferedReader.read(BufferedReader.java:325) 在 org.jivesoftware.smack.util.ObservableReader.read(SourceFile:41) 在 org.kxml2.io.KXmlParser.fillBuffer(KXmlParser.java:1515) 在 org.kxml2.io.KXmlParser.peekType(KXmlParser.java :992) 在 org.jivesoftware.smack.tcp 的 org.kxml2.io.KXmlParser.next(KXmlParser.java:313) 的 org.kxml2.io.KXmlParser.next(KXmlParser.java:349)。XMPPTCPConnection$PacketReader.parsePackets(SourceFile:1240) at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$300(SourceFile:1014) at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(SourceFile:1029)在 java.lang.Thread.run(Thread.java:818) 12-08 11:15:31.216 13894-14722/com.quickblox.sample D/SMACK: XMPPConnection 由于异常而关闭 (0) 12-08 11: 15:31.216 13894-14722/com.quickblox.sample W/System.err: java.net.SocketTimeoutException: 读取超时 12-08 11:15:31.216 13894-14722/com.quickblox.sample W/System.err:在 com.android.org.conscrypt。NativeCrypto.SSL_read(本机方法)12-08 11:15:31.216 13894-14722/com.quickblox.sample W/System.err:在 com.android.org.conscrypt.OpenSSLSocketImpl$SSLInputStream.read(OpenSSLSocketImpl.java:705 ) 12-08 11:15:31.216 13894-14722/com.quickblox.sample W/System.err: 在 java.io.InputStreamReader.read(InputStreamReader.java:233) 12-08 11:15:31.216 13894-14722 /com.quickblox.sample W/System.err:在 java.io.BufferedReader.read(BufferedReader.java:325) 12-08 11:15:31.216 13894-14722/com.quickblox.sample W/System.err:在 org.jivesoftware.smack.util.ObservableReader.read(SourceFile:41) 12-08 11:15:31.216 13894-14722/com.quickblox.sample W/System.err:在 org.kxml2.io.KXmlParser.fillBuffer (KXmlParser.java:1515) 12-08 11:15:31.216 13894-14722/com.quickblox.sample W/System.err: at org.kxml2.io.KXmlParser.peekType(KXmlParser.java:992) 12-08 11:15:31.216 13894-14722/com.quickblox.sample W/System.err: at org.kxml2.io.KXmlParser.next(KXmlParser.java:349) 12-08 11:15 :31.216 13894-14722/com.quickblox.sample W/System.err: 在 org.kxml2.io.KXmlParser.next(KXmlParser.java:313) 12-08 11:15:31.216 13894-14722/com.quickblox。 W/System.err 示例:在 org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(SourceFile:1240) 12-08 11:15:31.216 13894-14722/com.quickblox.sample W/System.err:在org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$300(SourceFile:1014) 12-08 11:15:31.217 13894-14722/com.quickblox.sample W/System.err: at org.jivesoftware.smack.tcp .XMPPTCPConnection$PacketReader$1.run(SourceFile:1029) 12-08 11:15:31.217 13894-13894/com.quickblox.sample I/VerboseQbChatConnectionListener: connectionClosedOnError():读取超时 12-08 11:15:31.217 13894-14722/com.quickblox.sample W/System.err: at java.lang.Thread.run(Thread.java:818)

我无法找到相同的解决方案。

4

1 回答 1

2

套接字是您用来通过网络进行通信的东西(例如连接到 Internet 上的服务器)。该错误信息表示程序试图通过网络从远程计算机接收数据,但一段时间内没有收到任何数据,因此程序停止等待接收数据。

这是可以通过增加 Socket Timeout 来解决此问题的代码片段,因为 Quickblox 中的默认 SocketTimeOut 是 30 秒。

QBChatService.ConfigurationBuilder chatServiceConfigurationBuilder = new QBChatService.ConfigurationBuilder();
chatServiceConfigurationBuilder.setSocketTimeout(180); //Sets chat socket's read timeout in seconds
chatServiceConfigurationBuilder.setKeepAlive(true); //Sets connection socket's keepAlive option.
QBChatService.setConfigurationBuilder(chatServiceConfigurationBuilder);
于 2016-12-09T07:49:19.793 回答