Невозможно подключиться к XMPP-серверу с помощью Smack на реальном устройстве ⇐ Android
-
Anonymous
Невозможно подключиться к XMPP-серверу с помощью Smack на реальном устройстве
Я работаю над приложением для Android, которое использует библиотеку Smack (версия 4.4.6) для подключения к серверу XMPP (я использую openfire на своем локальном компьютере). Код прекрасно работает в эмуляторе, но когда я пытаюсь запустить его на реальном устройстве, я сталкиваюсь со следующей ошибкой:
org.jivesoftware.smack.SmackException$EndpointConnectionException: Не удалось выполнить следующие адреса: 'rfc6120 a/aaaa endpoint + [/192.168.1.186:5222] (/192.168.1.186:5222)', поскольку: java. net.SocketTimeoutException: не удалось подключиться к /192.168.1.186 (порт 5222) из /192.168.1.197 (порт 43530) через 30000 мс. String serverAddress = "192.168.1.186"; // Замените IP-адресом или именем хоста вашего сервера int serverPort = 5222; // Порт XMPP по умолчанию Строка имя пользователя = "john@gmail.com"; Строковый пароль = «Джон»; Конфигурация XMPPTCPConnectionConfiguration = XMPPTCPConnectionConfiguration.builder() .setXmppDomain("ismail.org") .setHost(адрес сервера) .setPort(Порт сервера) .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled) // При необходимости вы можете настроить параметры безопасности .строить(); Соединение AbstractXMPPConnection = новое XMPPTCPConnection (конфигурация); пытаться { System.out.println("Пытаюсь подключиться...."); соединение.подключиться(); System.out.println("Подключено..."); пытаться { Connection.login("Джон","Джон"); } catch (XMPPException | SmackException | IOException e) { е.printStackTrace(); } System.out.println("Выполнен вход"); System.out.println("Начать поиск...."); логическое альфа = существует («альфа», соединение); System.out.println("Пользователь существует или нет: " + альфа); } catch (Исключение е) { е.printStackTrace(); } Как уже упоминалось, этот код отлично работает в эмуляторе, но не на реальном устройстве. Может ли кто-нибудь помочь мне понять, почему я сталкиваюсь с этой ошибкой на реальном устройстве и как ее устранить?
Отредактировано: я только что нашел решение своей проблемы, но не знаю, правильное ли оно, но оно работает. Я обнаружил, что мой брандмауэр заблокировал мое устройство Android для проверки связи с моим сервером, поэтому я создал правило, разрешающее трафику, идущему через порт 5222, вот шаги, которые нужно сделать Вот шаги по созданию правила для входящего трафика для порта 5222:
Откройте настройки брандмауэра Windows на ноутбуке с Windows 11.
На левой панели нажмите «Правила для входящего трафика».
На правой панели нажмите «Новое правило...», чтобы открыть мастер создания нового правила для входящего трафика.
Выберите «Порт» и нажмите «Далее».
Выберите «TCP» и укажите номер порта 5222. Нажмите «Далее».
Выберите «Разрешить подключение» и нажмите «Далее».
Оставьте все профили (Домен, Частный, Публичный) отмеченными, если хотите разрешить подключение во всех типах сетей. Нажмите «Далее».
Присвойте правилу имя (например, «Разрешить порт XMPP 5222») и при необходимости добавьте описание. Нажмите «Готово», чтобы создать правило.
Проверьте соединение вашего приложения Android с сервером XMPP на ноутбуке с Windows. Теперь все должно работать без отключения всего брандмауэра.
Я работаю над приложением для Android, которое использует библиотеку Smack (версия 4.4.6) для подключения к серверу XMPP (я использую openfire на своем локальном компьютере). Код прекрасно работает в эмуляторе, но когда я пытаюсь запустить его на реальном устройстве, я сталкиваюсь со следующей ошибкой:
org.jivesoftware.smack.SmackException$EndpointConnectionException: Не удалось выполнить следующие адреса: 'rfc6120 a/aaaa endpoint + [/192.168.1.186:5222] (/192.168.1.186:5222)', поскольку: java. net.SocketTimeoutException: не удалось подключиться к /192.168.1.186 (порт 5222) из /192.168.1.197 (порт 43530) через 30000 мс. String serverAddress = "192.168.1.186"; // Замените IP-адресом или именем хоста вашего сервера int serverPort = 5222; // Порт XMPP по умолчанию Строка имя пользователя = "john@gmail.com"; Строковый пароль = «Джон»; Конфигурация XMPPTCPConnectionConfiguration = XMPPTCPConnectionConfiguration.builder() .setXmppDomain("ismail.org") .setHost(адрес сервера) .setPort(Порт сервера) .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled) // При необходимости вы можете настроить параметры безопасности .строить(); Соединение AbstractXMPPConnection = новое XMPPTCPConnection (конфигурация); пытаться { System.out.println("Пытаюсь подключиться...."); соединение.подключиться(); System.out.println("Подключено..."); пытаться { Connection.login("Джон","Джон"); } catch (XMPPException | SmackException | IOException e) { е.printStackTrace(); } System.out.println("Выполнен вход"); System.out.println("Начать поиск...."); логическое альфа = существует («альфа», соединение); System.out.println("Пользователь существует или нет: " + альфа); } catch (Исключение е) { е.printStackTrace(); } Как уже упоминалось, этот код отлично работает в эмуляторе, но не на реальном устройстве. Может ли кто-нибудь помочь мне понять, почему я сталкиваюсь с этой ошибкой на реальном устройстве и как ее устранить?
Отредактировано: я только что нашел решение своей проблемы, но не знаю, правильное ли оно, но оно работает. Я обнаружил, что мой брандмауэр заблокировал мое устройство Android для проверки связи с моим сервером, поэтому я создал правило, разрешающее трафику, идущему через порт 5222, вот шаги, которые нужно сделать Вот шаги по созданию правила для входящего трафика для порта 5222:
Откройте настройки брандмауэра Windows на ноутбуке с Windows 11.
На левой панели нажмите «Правила для входящего трафика».
На правой панели нажмите «Новое правило...», чтобы открыть мастер создания нового правила для входящего трафика.
Выберите «Порт» и нажмите «Далее».
Выберите «TCP» и укажите номер порта 5222. Нажмите «Далее».
Выберите «Разрешить подключение» и нажмите «Далее».
Оставьте все профили (Домен, Частный, Публичный) отмеченными, если хотите разрешить подключение во всех типах сетей. Нажмите «Далее».
Присвойте правилу имя (например, «Разрешить порт XMPP 5222») и при необходимости добавьте описание. Нажмите «Готово», чтобы создать правило.
Проверьте соединение вашего приложения Android с сервером XMPP на ноутбуке с Windows. Теперь все должно работать без отключения всего брандмауэра.
Мобильная версия