Я работаю над чат-приложением, используя asmack. Я могу установить соединение xmpp и правильно отправлять и получать сообщения. Однако я хочу повторно подключить XMPP-соединение, если я изменю подключение к Интернету с WIFI на #G и наоборот. Чтобы прослушать изменение подключения, у меня есть широковещательный приемник, который успешно уведомляет о соединении. Если я свяжусь как false, я проверю соединение xmpp для null или не null. Если это не null, я устанавливаю его как null. И когда интернет подключен, я пытаюсь восстановить соединение xmpp. Главное, что я запускаю свое приложение в первый раз, соединение xmpp успешно завершено, и квитирование TLS выполняется правильно. Я уточнял логику доверенной следующим образом:Невозможно повторно подключить XMPP при подключении к Интернету
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH)
{
connectionConfig.setTruststoreType("AndroidCAStore");
connectionConfig.setTruststorePassword(null);
connectionConfig.setTruststorePath(null);
}
else
{
connectionConfig.setTruststoreType("BKS");
String path = System.getProperty("javax.net.ssl.trustStore");
if(path == null)
{
path = System.getProperty("java.home") + File.separator + "etc" + File.separator + "security" + File.separator + "cacerts.bks";
}
connectionConfig.setTruststorePath(path);
}
Это прекрасно работает в первый раз, и рукопожатие TLS дает мне ниже результата в LogCat:
Но когда я пытаюсь восстановить, как описано выше, я не получаю тег успеха, который был получен ранее. Вместо того, чтобы ошибки, полученные следующим образом:
02-19 17:59:39.098: W/System.err(21977): java.net.SocketException: Socket closed
02-19 17:59:39.133: W/System.err(21977): at libcore.io.Posix.sendtoBytes(Native Method)
02-19 17:59:39.133: W/System.err(21977): at libcore.io.Posix.sendto(Posix.java:146)
02-19 17:59:39.137: W/System.err(21977): XMPPError establishing connection with server.: remote-server-error(502) XMPPError establishing connection with server.
02-19 17:59:39.141: W/System.err(21977): -- caused by: javax.net.ssl.SSLException: Unable to create application data
02-19 17:59:39.160: W/System.err(21977): at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:177)
02-19 17:59:39.160: W/System.err(21977): at libcore.io.IoBridge.sendto(IoBridge.java:473)
02-19 17:59:39.160: W/System.err(21977): at java.net.PlainSocketImpl.write(PlainSocketImpl.java:507)
02-19 17:59:39.160: W/System.err(21977): at java.net.PlainSocketImpl.access$100(PlainSocketImpl.java:46)
02-19 17:59:39.160: W/System.err(21977): at java.net.PlainSocketImpl$PlainSocketOutputStream.write(PlainSocketImpl.java:269)
02-19 17:59:39.160: W/System.err(21977): at java.io.OutputStreamWriter.flushBytes(OutputStreamWriter.java:167)
02-19 17:59:39.160: W/System.err(21977): at java.io.OutputStreamWriter.flush(OutputStreamWriter.java:158)
02-19 17:59:39.160: W/System.err(21977): at java.io.BufferedWriter.flush(BufferedWriter.java:124)
02-19 17:59:39.160: W/System.err(21977): at org.jivesoftware.smack.util.ObservableWriter.flush(ObservableWriter.java:48)
02-19 17:59:39.160: W/System.err(21977): at org.jivesoftware.smack.PacketWriter.writePackets(PacketWriter.java:196)
02-19 17:59:39.160: W/System.err(21977): at org.jivesoftware.smack.PacketWriter.access$000(PacketWriter.java:40)
02-19 17:59:39.160: W/System.err(21977): at org.jivesoftware.smack.PacketWriter$1.run(PacketWriter.java:76)
02-19 17:59:39.164: W/System.err(21977): at org.jivesoftware.smack.XMPPConnection.initReaderAndWriter(XMPPConnection.java:699)
02-19 17:59:39.164: W/System.err(21977): at org.jivesoftware.smack.XMPPConnection.proceedTLSReceived(XMPPConnection.java:835)
02-19 17:59:39.164: W/System.err(21977): at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:262)
02-19 17:59:39.164: W/System.err(21977): at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:43)
02-19 17:59:39.164: W/System.err(21977): at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:69)
02-19 17:59:39.164: W/System.err(21977): Nested Exception:
02-19 17:59:39.164: W/System.err(21977): javax.net.ssl.SSLException: Unable to create application data
02-19 17:59:39.164: W/System.err(21977): at org.apache.harmony.xnet.provider.jsse.NativeCrypto.SSL_do_handshake(Native Method)
02-19 17:59:39.164: W/System.err(21977): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:395)
02-19 17:59:39.164: W/System.err(21977): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl$SSLInputStream.<init>(OpenSSLSocketImpl.java:647)
02-19 17:59:39.164: W/System.err(21977): at org.apache.harmony.xnet.provider.jsse.OpenSSLSocketImpl.getInputStream(OpenSSLSocketImpl.java:618)
02-19 17:59:39.164: W/System.err(21977): at org.jivesoftware.smack.XMPPConnection.initReaderAndWriter(XMPPConnection.java:666)
02-19 17:59:39.164: W/System.err(21977): at org.jivesoftware.smack.XMPPConnection.proceedTLSReceived(XMPPConnection.java:835)
02-19 17:59:39.164: W/System.err(21977): at org.jivesoftware.smack.PacketReader.parsePackets(PacketReader.java:262)
02-19 17:59:39.164: W/System.err(21977): at org.jivesoftware.smack.PacketReader.access$000(PacketReader.java:43)
02-19 17:59:39.164: W/System.err(21977): at org.jivesoftware.smack.PacketReader$1.run(PacketReader.java:69)
Пожалуйста, помогите мне восстановить неудавшуюся связь XMPP, а также дайте мне знать, если есть способ получить идентификатор сеанса, так что я могу проверить с сервером ли любой XMPP соединение сохраняется в отношении запрошенного идентификатора сеанса.
вы используете aSmack? – Carnal
Проверьте эту ссылку: http://stackoverflow.com/questions/13080535/how-to-keep-a-xmpp-connection-stable-on-android-with-asmack – Carnal
Да, я использую библиотеку asmack. Я упомянул об этом и в своем описании. –