Не удается подключить клиент Android с локальным сервером XMPP
Это касаемо поста здесь
Я могу подключить свой компьютер к локальной настройке сервера Tigase локально (я использую Smack API). Теперь у меня возникают проблемы, когда я хочу подключить Android Phone к этому серверу по Wi-Fi. Я могу подключиться к локальному серверу с помощью клиента Beem для android. Мой XMPP Доменное имя сервера - это имя моего компьютера "mwbn43-1", а IP-адрес - "192.168.0.221"(я могу пропинговать этот сервер с Эмулятор терминала Android). В настройках Beem есть опция Advanced, где я могу указать сервер, к которому я хочу подключиться (который я дал в качестве IP-адреса). Если я не установил эту опцию, я не смогу подключиться. Вот фрагмент кода код, который я использовал для моего клиента Android.
XMPPConnection.DEBUG_ENABLED = true;
ConnectionConfiguration config = new ConnectionConfiguration("mwbn43-1",5222);
//ConnectionConfiguration config = new ConnectionConfiguration("192.168.0.221",5222);
config.setSASLAuthenticationEnabled(false);
config.setCompressionEnabled(false);
XMPPConnection xmpp = new XMPPConnection(config);
try {
xmpp.connect();
xmpp.login("admin@mwbn43-1", "tigase");
String host = xmpp.getHost();
String id = xmpp.getConnectionID();
int port = xmpp.getPort();
boolean i = false;
i = xmpp.isConnected();
if(i)
{answer = "Connected to " + host + " via port " + port + " with ID " + id;
answerfield.setText(answer);}
}//end try
catch (XMPPException e) {
answerfield.setText("Failed to connect");
Log.v(TAG, "Failed to connect to " + xmpp.getHost());
e.printStackTrace();
Я также могу подключиться к серверу Google Talk с помощью этого кода. При установлении соединения с локальным сервером я пытался указать IP-адрес и имя хоста для подключения. Когда я даю IP-адрес (192.168.0.221), я получаю "Нет ответа" из ошибки сервера 'с потоком: ошибка (хост-неизвестен), и когда я даю имя хоста (mwbn43-1), я получаю'remote-server-timeout(504)'с хостом неразрешенным.
Я посмотрел на код Beem, чтобы увидеть, как он соединяется с сервером, но не смог найти много. Я также дал пользователю разрешения для Интернета. Может кто-нибудь сказать, какие строки кода я должен добавить для связи с локальным сервером.
5 ответов
Попробуйте 3 аргумента конструктора ConnectionConfiguration. Это позволит вам указать хост, порт и домен. Хост и домен не обязательно должны совпадать. В вашем случае, я думаю:
ConnectionConfiguration config =
new ConnectionConfiguration("192.168.0.221",5222,"mwbn43-1");
Попробуйте удалить имя хоста из входа в систему.
Например, используйте
connection.login("username", "password");
вместо
connection.login("username@host.com", "password");
Убедитесь, что вы не используете нативный smack jar, который не будет работать на Android, попробуйте использовать asmack или одного из его предков android-and-xmpp-now-available-solutions
Проверьте, правильно ли вы указали разрешение: android.permission.INTERNET
Используйте конструктор с тремя аргументами для ConnectionConfiguration. и передать учетные данные без расширения имени хоста.
Например, см. Ниже код:
ConnectionConfiguration config = new ConnectionConfiguration("hostname/IP address", 5222, "servicename/domainname");
connection = new XMPPConnection(config);
connection.connect();
connection.login("user1", "password");`