2016-07-28 5 views
2

Я работаю с XMPPTCPConnection для подключения к моему серверу openfire, успешно подключен и успешно отправлен/принят пакет данных. Соединение остается стабильным, но внезапно падает с исключением, и я не понимаю понятия об этом исключении. Мое время отключения соединения с сервером составляет 60 секунд. И я реализовал весь менеджер ping и код повторного подключения. Поэтому его повторное подключение, но не получение того, почему он отключается от исключения или как разрешить это исключение.xmpp с подключением клиента openfire, потерянным suddently with smack 4.1

E/MainService: Connection to XMPP server was lost.org.jivesoftware.smack.SmackException: Parser got END_DOCUMENT event. This could happen e.g. if the server closed the connection without sending a closing stream element 
07-28 10:21:22.003 12719-16068/com.thatsit.android D/SMACK: 
XMPPConnection closed due to an exception (0) 
07-28 10:21:22.003 12719-16068/com.thatsit.android W/System.err: org.jivesoftware.smack.SmackException: Parser got END_DOCUMENT event. This could happen e.g. if the server closed the connection without sending a closing stream element 

07-28 10:21:22.003 12719-16068/com.thatsit.android W/System.err:  at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPConnection.java:1170) 

07-28 10:21:22.003 12719-16068/com.thatsit.android W/System.err:  at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$300(XMPPTCPConnection.java:952) 
07-28 10:21:22.003 12719-16068/com.thatsit.android W/System.err:  at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnection.java:967) 
07-28 10:21:22.013 12719-16068/com.thatsit.android W/System.err:  at java.lang.Thread.run(Thread.java:818) 

Любая помощь будет высоко оценена.

ответ

0

нет необходимости отключать идеальных пользователей.

Если вы снова отключитесь, выполните услугу, которая работает в фоновом режиме, и проверьте подключение xmpp каждые 10 секунд. Если подключено, нет необходимости подключаться, но если отключить, подключите его снова к серверу. Я обработал это из своего приложения.

У меня также есть открытый исходный код на github. Если вы хотите, вы можете обратиться оттуда.

Это не обновленный код с 4.1, но я уже внес изменения, но его необходимо загрузить. Сегодня вечером я загружу обновленный код.

Спасибо, надеюсь, это поможет решить вашу проблему.

0

На самом деле есть две проблемы, связанные с вашей: одна находится в Openfire 4.x.x, а другая - в библиотеке Smack 4.0.7.

В Openfire 4.x.x и выше появляется ошибка (OF-1308), когда сервер отключает клиент, он не отправляет конечный тег потока клиенту в качестве намеренного отключения. Он просто закрывает сокет и заставляет PacketReader получать событие END_DOC.

В программе Smack PacketReader обрабатывает IOException (непредвиденная потеря сетевого подключения), конечный тег потока (намеренное отключение) или END_DOC (неожиданное отключение от сервера, например, сервера.) Получение IOException вызывает диспетчер повторного соединения, если он включен. Получение концевого тега потока вызовет обычное событие закрытия соединения. Однако Smack рассматривает END_DOC как получение конечного тега потока. На мой взгляд, Smack должен рассматривать END_DOC как IOException, поскольку конечный тег потока не получен.

Существует еще один поворот. Если включено сжатие, PacketReader получает IOException, если сервер просто закрывает сокет. Если сжатие отключено, PacketReader получает END_DOC, если сервер просто закрывает сокет.

В вашем случае, когда включен тайм-аут простоя, клиент не должен запускать ReconnectionManager. В противном случае он побеждает цель таймаута простоя. Я тестирую свое исправление, поэтому я еще не сообщил об ошибке Smack для сообщества Ignite.