【问题标题】:Not able to connet to ejabberd server through smack无法通过 smack 连接到 ejabberd 服务器
【发布时间】:2020-01-01 16:12:13
【问题描述】:

我正在使用 ejabberd 设置聊天服务并使用 smack 为 android 设备构建 XMPP 客户端。

这里有一些重要的细节。

服务器操作系统:ubuntu 18.04 服务器托管为 localhost(jid 格式:alice@localhost)。 服务器系统IP:192.168.4.162

客户: 拍打 4.3.1 通过USB调试使用外接手机:诺基亚3.1 Plus。

这是我的代码

这是我尝试的一些配置。

  private class MyLoginTask extends AsyncTask<String, String, String> {
        @Override
        protected String doInBackground(String... params) {
            // Create a connection to the jabber.org server.
            InetAddress addr = null;
            try{
                addr = InetAddress.getByName("192.168.4.162");

            }catch(UnknownHostException e){
                e.printStackTrace();
            }
            XMPPTCPConnectionConfiguration config = null;
            DomainBareJid serviceName = null;

            try{
                serviceName = JidCreate.domainBareFrom("localhost");
                System.out.println("serviceName: "+serviceName);
            }catch(XmppStringprepException e){
                e.printStackTrace();
            }

            HostnameVerifier verifier = new HostnameVerifier() {
                @Override
                public boolean verify(String hostname, SSLSession session) {
                    return true;
                }
            };

//            ConnectionConfiguration connConfig = new ConnectionConfiguration("talk.google.com", PORT, SERVICE);
            try{
                config = XMPPTCPConnectionConfiguration.builder()
                        .setUsernameAndPassword("alice", "9009")
                        .setHost("192.168.4.162")                        
         .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled)
                        .setXmppDomain("localhost")
                        .setHostnameVerifier(verifier)
                        .setHostAddress(addr)
                        .setPort(5222)
                        .build();
            }catch(XmppStringprepException e){
                e.printStackTrace();
            }

            AbstractXMPPConnection conn1 = new XMPPTCPConnection(config);
            try {
                System.out.println("Connecting.......");                AndroidUsingLinkProperties.setup(getApplicationContext());
                conn1.connect().login();
                if(conn1.isConnected()) {
                    Log.w("app", "conn done");
                }
                conn1.login();

                if(conn1.isAuthenticated()) {
                    Log.w("app", "Auth done");
                }
            }
            catch (Exception e) {
                Log.w("app", e.toString());
            }

            return "";
        }


        @Override
        protected void onPostExecute(String result) {
        }

     }

上面我尝试的配置结果是:

org.jivesoftware.smack.SmackException$ConnectionException: The following addresses failed: '192.168.4.162:5222' failed because: /192.168.4.162 exception: java.net.ConnectException: failed to connect to /192.168.4.162 (port 5222) from /192.168.4.182 (port 39568) after 30000ms: isConnected failed: EHOSTUNREACH (No route to host)

但是我能够通过任何其他客户端(psi、gajim、我的网络应用程序(BOSH 连接))成功地建立到我的服务器的连接。

如果网络是问题,以下可能会有所帮助:

$ nmap localhost
Starting Nmap 7.80 ( https://nmap.org ) at 2019-08-28 18:00 IST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000056s latency).
Not shown: 992 closed ports
PORT     STATE SERVICE
111/tcp  open  rpcbind
139/tcp  open  netbios-ssn
445/tcp  open  microsoft-ds
631/tcp  open  ipp
5222/tcp open  xmpp-client
5269/tcp open  xmpp-server
5280/tcp open  xmpp-bosh
8600/tcp open  asterix

Nmap done: 1 IP address (1 host up) scanned in 0.09 seconds

【问题讨论】:

    标签: xmpp ejabberd smack


    【解决方案1】:

    我去过那里,我偶然发现我的手机和我的 ejabberd 服务器在不同的网络上。它们应该与本例位于同一网络上。确保您在同一网络上,此错误应该会消失。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      • 1970-01-01
      • 2021-01-16
      • 1970-01-01
      • 1970-01-01
      • 2015-01-26
      相关资源
      最近更新 更多