Android XMPP 基本连接

Posted

技术标签:

【中文标题】Android XMPP 基本连接【英文标题】:Android XMPP basic connection 【发布时间】:2016-02-26 17:05:28 【问题描述】:

我对 android 有点陌生,我正在尝试构建一个聊天 android 应用程序 使用 openfire 作为服务器和 smack 4.1.6 库 现在我正在尝试建立一个基本的连接,我正在关注 smack 文档

    XMPPTCPConnectionConfiguration.Builder conf = XMPPTCPConnectionConfiguration.builder();
    conf.setUsernameAndPassword("user", "user");
    conf.setResource("android");
    conf.setServiceName("my_ip_adress");
    conf.setHost("my_ip_adress");
    conf.setPort(5222);
    conf.setSecurityMode(ConnectionConfiguration.SecurityMode.ifpossible);


    AbstractXMPPConnection connection=new XMPPTCPConnection(conf.build());
    try 
        Log.e("CONNECTION====>", "try");
        connection.connect();
        Log.e("CONNECTION====>", "success");
        connection.login();
        Log.e("LOGIN====>", "success");
     catch (SmackException e) 
        e.printStackTrace();
     catch (IOException e) 
        e.printStackTrace();
     catch (XMPPException e) 
        e.printStackTrace();
    

我的日志里有这个

  E/CONNECTION====>: try
02-26 17:59:14.995 15119-15145/com.example.firas.simplexmpp W/System.err: org.jivesoftware.smack.SmackException$ConnectionException: The following addresses failed: '172.16.50.52:5222' failed because java.net.ConnectException: failed to connect to /172.16.50.52 (port 5222) after 30000ms: connect failed: ENETUNREACH (Network is unreachable)

这些是我的依赖项

    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'org.igniterealtime.smack:smack-android:4.1.6'
    compile 'org.igniterealtime.smack:smack-tcp:4.1.6'
    compile 'org.igniterealtime.smack:smack-im:4.1.6'
    compile 'org.igniterealtime.smack:smack-extensions:4.1.6'

【问题讨论】:

如果您的客户端不在服务器的网络中,您必须使用服务器的真实IP。此外,如果您的服务器位于 NAT 后面,您必须打开 TCP 端口 (5222) 【参考方案1】:

检查您的手机或模拟器是否有互联网连接

private boolean isNetworkAvailable() 
ConnectivityManager connectivityManager 
  = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();

【讨论】:

【参考方案2】:

您好,万一这对将来的任何人有帮助,我已将 ConnectionConfiguration.SecurityMode 设置为禁用并且效果很好

02-28 11:00:55.651 30656-30682/com.example.firas.simplexmpp E/CONNECTION====>: try
02-28 11:00:55.721 30656-30682/com.example.firas.simplexmpp E/CONNECTION====>: success
02-28 11:00:56.162 30656-30682/com.example.firas.simplexmpp E/LOGIN====>: success

【讨论】:

以上是关于Android XMPP 基本连接的主要内容,如果未能解决你的问题,请参考以下文章

android中的XMPP连接错误

如何在Android中创建使Xmpp与XMPP服务器保持连接的服务?

适用于 Android 的 XMPP/facebook 聊天连接

Android/XMPP:连接类型更改后无法重新连接到服务器

android中的XMPP连接使用smack

无法在android中的xmpp服务器中连接