无法将Android客户端与本地XMPP服务器连接

4
这是关于这里的帖子。
我可以将我的PC连接到本地设置的tigase服务器(我正在使用Smack API)。现在,当我想通过Wi-Fi连接Android手机到该服务器时,我遇到了问题。我能够使用Android客户端Beem连接到本地服务器。我的XMPP域名为我的PC名称“mwbn43-1”,IP地址为“192.168.0.221”(我能够从Android终端模拟器中ping通此服务器)。在Beem设置中,有一个高级选项,我可以指定要连接的服务器(我已经给出了IP地址)。如果我不设置此选项,我就无法连接。现在,这是我用于我的Android客户端的代码片段。
    XMPPConnection.DEBUG_ENABLED = true;
    ConnectionConfiguration config = new ConnectionConfiguration("mwbn43-1",5222);

    //ConnectionConfiguration config = new ConnectionConfiguration("192.168.0.221",5222);             
    config.setSASLAuthenticationEnabled(false);
    config.setCompressionEnabled(false);

    XMPPConnection xmpp = new XMPPConnection(config);

    try {

            xmpp.connect(); 

            xmpp.login("admin@mwbn43-1", "tigase");
            String host = xmpp.getHost();
            String id = xmpp.getConnectionID();
            int port = xmpp.getPort();
            boolean i = false;
            i = xmpp.isConnected();
            if(i)
            {answer = "Connected to " + host + " via port " + port + " with ID " + id;
            answerfield.setText(answer);}

          }//end try 
    catch (XMPPException e) {  
     answerfield.setText("Failed to connect");
     Log.v(TAG, "Failed to connect to " + xmpp.getHost());
            e.printStackTrace();

我可以使用这段代码成功连接到谷歌聊天服务器。我尝试使用IP地址和主机名来连接本地服务器。当我输入IP地址(192.168.0.221)时,会出现“无响应”的错误,同时显示流错误(host-unknown)。当我输入主机名(mwbn43-1)时,会出现“远程服务器超时(504)”的错误,并提示主机未解析。
我查看了Beem代码以了解它如何连接服务器,但没有找到太多有用信息。我也已经为Internet设置了用户权限。请问有人能告诉我应该添加哪些代码行才能与本地服务器通信吗?

可能是Tigase的问题。我无法通过Pidgin和Empathy连接到我的Tigase服务器,出现了“host-unknown”错误。以前使用jabberd可以正常工作。 - v6ak
这个解决方案对我有用!!如果你正在使用安卓设备连接XMPP服务器(在我的情况下是ejabberd),你必须使用ASmack jar而不是Smack jar。如果你的XMPP服务器是本地安装的,并且你是通过WIFI连接的,你需要使用3个参数的ConnectionConfiguration构造函数。第一个参数HOST需要你的本地WIFI IP地址(一定要非常小心),第二个参数端口将是5222,第三个参数应该是你在安装时创建的XMPP服务器名称。然后对于connection.login("username", "password"),你可以简单地使用像admin这样的用户名。 - Hari Gudigundla
可能是重复的问题:当我尝试连接服务器时出现“remote-server-timeout”异常。参考链接 - Flow
5个回答

6
尝试使用3个参数的ConnectionConfiguration构造函数,它允许您指定主机、端口和域。主机和域不必是相同的值。在您的情况下,我猜测:
ConnectionConfiguration config = 
  new ConnectionConfiguration("192.168.0.221",5222,"mwbn43-1");

我在连接Android虚拟设备到XMPP服务器时遇到了问题。我正在使用这个code来连接XMPP,但是我得到了exception,你能告诉我任何解决方案吗? - nawaab saab
没有线索。请将其作为另一个问题来询问。 - Martín Schonaker
谢谢查看,问题已经通过这个解决。 - nawaab saab

2
尝试从登录调用中删除主机名。
例如,使用:
connection.login("username", "password");

代替
connection.login("username@host.com", "password");

@Hitesh Patel 我在连接Android虚拟设备到XMPP服务器时遇到了问题。我正在使用这个code来连接XMPP,但是我得到了exception,你能告诉我任何解决方案吗? - nawaab saab

0

使用带有三个参数的ConnectionConfiguration构造函数,并在不包含主机名扩展的情况下传递凭据。

例如,请参见以下代码:

ConnectionConfiguration config = new ConnectionConfiguration("hostname/IP address", 5222, "servicename/domainname");  
connection = new XMPPConnection(config);  
connection.connect();  
connection.login("user1", "password");`

0

请检查您是否声明了正确的权限:android.permission.INTERNET


我在连接Android虚拟设备到XMPP服务器时遇到了问题。我正在使用这个code来连接XMPP,但是我得到了exception,你能告诉我任何解决方案吗? - nawaab saab

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接