首页 文章

连接到本地openfire服务器android

提问于
浏览
-2

我正在开发Ubuntu . 我正在尝试将我的xmpp客户端连接到本地openfire服务器 .

AndroidConnectionConfiguration configuration = new AndroidConnectionConfiguration(
                host, Integer.parseInt(port), service);
        SASLAuthentication.supportSASLMechanism("PLAIN", 0); // (I tried after removing this line)
        configuration.setSASLAuthenticationEnabled(true); 
        configuration.setDebuggerEnabled(true);
        XMPPConnection connection = new XMPPConnection(configuration);

        try {
            connection.connect();
            Log.i("XMPPClient",
                    "[SettingsDialog] Connected to " + connection.getHost());
        } catch (XMPPException ex) {
            Log.e("XMPPClient", "[SettingsDialog] Failed to connect to "
                    + connection.getHost());
            Log.e("XMPPClient", ex.toString());
            xmppClient.setConnection(null);
        }
        try {
            connection.login(username, password);
            Log.i("XMPPClient", "Logged in as " + connection.getUser());

            // Set the status to available
            Presence presence = new Presence(Presence.Type.available);
            connection.sendPacket(presence);
            xmppClient.setConnection(connection);
        } catch (XMPPException ex) {
            Log.e("XMPPClient", "[SettingsDialog] Failed to log in as "
                    + username);
            Log.e("XMPPClient", ex.toString());
            xmppClient.setConnection(null);
        }

现在,我可以使用此代码连接Google聊天服务器 . 我也可以在Ubuntu上将本地服务器与Spark客户端连接起来 . 但无法与Android上的本地服务器连接 .

其中 host 为10.0.2.2(Android localhost) port 5222 service localhost

Android客户端可以成功连接本地服务器,但我无法登录

我得到的错误 sasl authentication failed using mechanism digest-md5

我正在搜索过去两天,尝试了很多东西,但本地服务器没有成功 .

1 回答

  • -1

    试试这个连接:

    public static boolean XMPPConnect() {
            try {
                System.setProperty("java.net.preferIPv6Addresses", "false");
                //SmackConfiguration.setPacketReplyTimeout(30000);
    
                config = new ConnectionConfiguration(Constant._hostName, port);
                //config = new AndroidConnectionConfiguration(Constant._hostName);
    
                //          config.setCompressionEnabled(true);
                //          config.setSASLAuthenticationEnabled(true);
                //          SmackConfiguration.setPacketReplyTimeout(1000*60);
                //          config.setSecurityMode(ConnectionConfiguration.SecurityMode.enabled);
                //          config.setReconnectionAllowed(true);
                //          //config.setCompressionEnabled(true);
                config.setRosterLoadedAtLogin(true);
                config.setSendPresence(true);
                //SASLAuthentication.supportSASLMechanism("MD5");
                config.setSASLAuthenticationEnabled(true);
                config.setCompressionEnabled(true);
                config.setSecurityMode(SecurityMode.enabled);
                config.setReconnectionAllowed(true);
    
                SmackConfiguration.setPacketReplyTimeout(30000);
    
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
                    config.setTruststoreType("AndroidCAStore");
                    config.setTruststorePassword(null);
                    config.setTruststorePath(null);
                }/*else if (Build.VERSION.SDK_INT<19 || Build.VERSION.SDK_INT>= Build.VERSION_CODES.ICE_CREAM_SANDWICH_MR1) {
    
                }*/ else {
                    config.setTruststoreType("BKS");
                    String path = System.getProperty("javax.net.ssl.trustStore");
                    if (path == null)
                        path = System.getProperty("java.home") + File.separator + "etc"
                                + File.separator + "security" + File.separator
                                + "cacerts.bks";
                    config.setTruststorePath(path);
                }
    
                connection = new XMPPConnection(config);
                config.setSASLAuthenticationEnabled(true);
                connection.connect();
                debugEnabledReset();
    
    
    
    
            } catch (Exception e) {
                XMPPConstants.XMPP_ERROR="socket_timeout";
                e.printStackTrace();
                if(connection.DEBUG_ENABLED==true)
                    connection.DEBUG_ENABLED = false;
                return false;
            }
            return true;
        }
    

    如果它返回true则登陆xmpp如下:

    public static boolean XMPPLogin(String uname, String password) {
    
            Roster roster = connection.getRoster();
            roster.addRosterListener(new RosterListener() {
                public void presenceChanged(Presence arg0) {}
                public void entriesUpdated(Collection<String> arg0) {}
                public void entriesDeleted(Collection<String> arg0) {}
                public void entriesAdded(Collection<String> arg0) {}
            });
    
            try {
    
    
                //SASLAuthentication.supportSASLMechanism("MD5", 0);
                connection.login(uname, password, "Smack");
    
    
            } catch (Exception e) {
                XMPPConstants.XMPP_ERROR="Username or password is incorrect";
                if(e.getMessage().toString().contains("No response")){
                    XMPPConstants.XMPP_ERROR="Server communication failed";
                }
                e.printStackTrace();
                if(connection.DEBUG_ENABLED==true)
                    connection.DEBUG_ENABLED = false;
                return false;
            }
            return true;
        }
    

相关问题