2016-02-20 2 views
0

У меня есть сервер XMPP ejabberd, установленный локально на Mac. Я использую этот код для подключения и входа в систему с помощью Smack API на Android.Подключение к серверу XMPP ejabberd на localhost с использованием Smack API на android

config = XMPPTCPConnectionConfiguration.builder() 
       .setUsernameAndPassword("[email protected]", "1") 
       .setHost("192.168.1.2") 
       .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled) 
       .setServiceName("192.168.1.2") 
       .setPort(Integer.parseInt("5222")) 
       .build(); 

     AbstractXMPPConnection conn2 = new XMPPTCPConnection(config); 
     try { 
      conn2.connect(); 
      conn2.login(); 
     } catch (SmackException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (XMPPException e) { 
      e.printStackTrace(); 
     } 

Используя тот же логин и пароль, Im возможность входа с помощью любого другого XMPP клиента как Adium, но приведенный выше код дает эту ошибку на андроид -

Соединение закрыто с ошибкой org.jivesoftware. smack.XMPPException $ StreamErrorException: хост неизвестный

Мой Локальный адрес 192.168.1.2 и панель ejabberd админ localhost: 5280/admin.

Я прочитал документацию и сделал все написанное. Любая проблема с кодом или чем-то здесь?

ответ

0
  • имя пользователя должно быть добавлено в «@»
  • setDebuggerEnabled(true), чтобы посмотреть, что происходит за кулисами
  • шаг подключения() и входа в систему() методы в фоновом потоке
  • вызова входа() после подключения устанавливается успешно использует соединение слушателю

config = XMPPTCPConnectionConfiguration.builder() 
       .setUsernameAndPassword("[email protected]", "1") 
       .setHost("192.168.1.2") 
       .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled) 
       .setServiceName("davids-macbook-pro.local") 
       .setPort(5222) 
       .setDebuggerEnabled(true) // to view what's happening in detail 
       .build(); 

AbstractXMPPConnection conn2 = new XMPPTCPConnection(config); 
try { 
    conn2.connect(); // move it to a background thread instead of main thread 
    // conn2.login(); 
} catch (SmackException e) { 
    e.printStackTrace(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} catch (XMPPException e) { 
    e.printStackTrace(); 
} 


conn2.addConnectionListener(new ConnectionListener() { 
    @Override 
    public void connected(XMPPConnection connection) { 
     new AsyncTask<Void, Void, Void>() { 
      @Override 
      protected Void doInBackground(Void... params) { 
       try { 
        conn2.login(); 
       } catch (SmackException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } catch (XMPPException e) { 
        e.printStackTrace(); 
       } 
       return null; 
      } 
     }.execute(); 
    } 

    @Override 
    public void authenticated(XMPPConnection connection, boolean resumed) { 

    } 

    @Override 
    public void connectionClosed() { 

    } 

    @Override 
    public void connectionClosedOnError(Exception e) { 

    } 

    @Override 
    public void reconnectionSuccessful() { 

    } 

    @Override 
    public void reconnectingIn(int seconds) { 

    } 

    @Override 
    public void reconnectionFailed(Exception e) { 

    } 
}); 
0

Я сделал это работает для подключения и входа на сервер таким образом -

config = XMPPTCPConnectionConfiguration.builder() 
       .setUsernameAndPassword("1", "1") 
       .setHost("192.168.1.2") 
       .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled) 
       .setServiceName("davids-macbook-pro.local") 
       .setPort(Integer.parseInt("5222")) 
       .build(); 

     AbstractXMPPConnection conn2 = new XMPPTCPConnection(config); 
     try { 
      conn2.connect(); 
      conn2.login(); 
     } catch (SmackException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } catch (XMPPException e) { 
      e.printStackTrace(); 
     } 
0

вы должны попробовать следующее: -

  1. попробуйте изменить свой порт на 5280 или попробовать 5227
  2. проверить свой сервер Конфигурация безопасности, если это необходимо или необязательно, потому что вы установили безопасность как отключен
  3. добавить подключение прослушиватель к вашему соединению xmpp
  4. setDebugEnab ле (правда), чтобы проверить привкусом журнала в консоли и добавить журнал на свой вопрос, что даст больше ясности в вопрос о том, что именно происходит
  5. попробуйте изменить ConnectionConfiguration.SecurityMode.disabled с XMPPTCPConnectionConfiguration.SecurityMode.required или XMPPTCPConnectionConfiguration.SecurityMode.optional
Смежные вопросы