首页 文章

尝试在Android上使用smack连接openfire时出错

提问于
浏览
1
XMPPTCPConnectionConfiguration.Builder configBuilder =  XMPPTCPConnectionConfiguration.builder();
    configBuilder.setUsernameAndPassword("test", "test");
    configBuilder.setResource("test");
    configBuilder.setServiceName("37.139.26.142");
    configBuilder.setHost("37.139.26.142");
    configBuilder.setPort(5222);
    configBuilder.setSendPresence(true);
    configBuilder.setDebuggerEnabled(true);
    configBuilder.setSecurityMode(XMPPTCPConnectionConfiguration.SecurityMode.required );
    SASLMechanism mechanism = new SASLDigestMD5Mechanism();
    SASLAuthentication.registerSASLMechanism(mechanism);
    SASLAuthentication.blacklistSASLMechanism("SCRAM-SHA-1");
    SASLAuthentication.unBlacklistSASLMechanism("DIGEST-MD5");
    AbstractXMPPConnection connection = new XMPPTCPConnection(configBuilder.build());
    try {
        connection.connect();
    } catch (SmackException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    } catch (XMPPException e) {
        e.printStackTrace();
    }
    try {
        connection.login();
    } catch (XMPPException e) {
        e.printStackTrace();
    } catch (SmackException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

我正在尝试握手我的Android应用程序和我的openfire服务器(在ubuntu上工作) . 但我不能 . 我没有任何失败或什么 . 什么都没发生 . 那感觉很糟糕 .

2 回答

  • 0

    你试过发短信吗?你确定没有连接吗?您是否检查过您的测试用户未连接的Openfire管理员?

    首先,我建议您尝试发送消息:

    ChatManager chatmanager = ChatManager.getInstanceFor(connection);
    Chat newChat = chatmanager.createChat("anotheruser@yourdomain", new MessageListener() {
        public void processMessage(Chat chat, Message message) {
            System.out.println("Received message: " + message);
        }
    });
    
    try {
        newChat.sendMessage("Howdy!");
    }
    catch (XMPPException e) {
        System.out.println("Error Delivering block");
    }
    

    我从以下代码获得此代码:http://www.igniterealtime.org/builds/smack/docs/latest/documentation/messaging.html

    另一个建议是禁用SecurityMode,仅用于测试 .

    configBuilder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
    

    如果没有任何效果,请尝试使用下面的配置,这对我有用 .

    XMPPTCPConnectionConfiguration.Builder config = XMPPTCPConnectionConfiguration
                            .builder();
                    config.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
                    config.setServiceName(serverAddress);
                    config.setHost(serverAddress);
                    config.setPort(5222);
                    config.setDebuggerEnabled(true);
            connection = new XMPPTCPConnection(config.build());
    
            try {
                connection.connect();
            } catch (SmackException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (XMPPException e) {
                e.printStackTrace();
            }
            try {
                connection.login(loginUser, passwordUser);
            } catch (XMPPException e) {
                e.printStackTrace();
            } catch (SmackException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
    
  • 7

    首先我发现这不是Android部分,这是关于Openfire的部分 . 因为我无法将它与Spark连接而且我在Logcat中看到了这个;

    W/System.err: org.jivesoftware.smack.SmackException$ConnectionException: The following addresses failed: '37.139.26.142:5222' failed because java.net.SocketTimeoutException: failed to connect to /37.139.26.142 (port 5222) after 30000ms
    

    然后我做了一些研究并尝试了一些事情,我看到它是关于Ubuntu(至少对我来说) . 然后我将我的openfire服务器移动到Centos . 然后我就可以与Spark连接了 . 然后我遇到了另一个问题 .

    org.jivesoftware.smack.SmackException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
    

    我用下面的代码解决了这个问题 . 我希望这可以帮助别人 .

    公共类MainActivity扩展AppCompatActivity {

    @Override
    
    
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
    
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    
        SmackConfiguration.DEBUG = true;
        XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder();
        configBuilder.setUsernameAndPassword("test", "test");
        configBuilder.setSecurityMode(ConnectionConfiguration.SecurityMode.disabled);
        configBuilder.setResource("test");
        configBuilder.setServiceName("enter your server ip here");
        configBuilder.setHost("eneter your server ip here");
        configBuilder.setPort(5222);
        configBuilder.setSendPresence(true);
        configBuilder.setDebuggerEnabled(true);
        SASLAuthentication.blacklistSASLMechanism("SCRAM-SHA-1");
        SASLAuthentication.blacklistSASLMechanism("DIGEST-MD5");
        SASLAuthentication.unBlacklistSASLMechanism("PLAIN");
    
        XMPPTCPConnection connection;
        connection = new XMPPTCPConnection(configBuilder.build());
        // Connect to the server
        try {
            connection.connect();
        } catch (SmackException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XMPPException e) {
            e.printStackTrace();
        }
        // Log into the server
    
        try {
            connection.login();
        } catch (XMPPException e) {
            e.printStackTrace();
        } catch (SmackException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    
    }
    

    }

相关问题