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

Posted

技术标签:

【中文标题】无法将 Android 客户端与本地 XMPP 服务器连接【英文标题】:Not able to connect Android client with local XMPP server 【发布时间】:2010-06-11 16:05:24 【问题描述】:

这是关于帖子here

我能够将我的 PC 连接到本地设置的本地 tigase 服务器(我正在使用 Smack API)。现在,当我想通过 Wi-Fi 将 android 手机连接到该服务器时,我遇到了问题。我可以使用客户端 Beem for android 连接到本地服务器。我的 XMPP 服务器域名是我的 PC 名称“mwbn43-1”,IP 地址是“192.168.0.221”(我可以从安卓终端模拟器)。在 Beem 设置中有一个高级选项,我可以在其中指定要连接的服务器(我已将其作为 IP 地址给出)。如果我不设置此选项,我将无法连接。现在这里是 sn-p我用于我的 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();

借助此代码,我还可以连接到 google talk 服务器。在与本地服务器建立连接时,我尝试提供 IP 地址和主机名进行连接。当我提供 IP 地址(192.168.0.221)时,我得到了'No response from server error' with stream:error(host-unknown),当我给出主机名(mwbn43-1)时,我得到'remote-server-timeout(504)',主机未解析。

我查看了 Beem 的代码,看看它是如何与服务器连接的,但找不到太多。我还授予了 Internet 用户权限。谁能告诉我应该添加哪些代码行来与本地服务器通信.

【问题讨论】:

可能是 Tigase 问题。由于出现“主机未知”错误,我无法从 Pidgin 和 Empathy 连接到我的 Tigase 服务器。它曾经在 jabberd 中工作。 这个解决方案对我有用!如果您使用 Android 设备连接到 XMPP 服务器(在我的情况下为 ejabberd),则必须使用 ASmack jar 而不是 Smack jar。如果您的 XMPP 服务器安装在本地并且通过 WIFI 连接,则需要使用 3 参数 ConnectionConfiguration 构造函数。第一个参数 HOST 需要您的本地 WIFI IP 地址(要非常小心),第二个参数端口将是 5222,第三个参数应该是您在安装时创建的 XMPP 服务器名称。然后对于 connection.login("username", "password") 您可以简单地使用用户名,例如 admin。 'remote-server-timeout' exception as I try to connect to the server的可能重复 【参考方案1】:

尝试 3 参数 ConnectionConfiguration 构造函数。它让你声明主机、端口和域。主机和域不必是相同的值。在你的情况下,我猜:

ConnectionConfiguration config = 
  new ConnectionConfiguration("192.168.0.221",5222,"mwbn43-1");

【讨论】:

我在将 android 虚拟设备连接到 xmpp 服务器时遇到问题。我正在使用这个code 连接到xmpp,我得到exception,你能告诉任何解决方案吗? 没有线索。将其作为另一个问题提出。 感谢您的关注,已通过 this 解决方案解决【参考方案2】:

尝试从登录调用中删除主机名。

例如, 使用

connection.login("username", "password");

而不是

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

【讨论】:

@Hitesh Patel 我在将 android 虚拟设备连接到 xmpp 服务器时遇到问题。我正在使用这个code 连接到xmpp,我得到exception,你能告诉任何解决方案吗?【参考方案3】:

ConnectionConfiguration 使用三参数构造函数。并在没有主机名扩展的情况下传递凭据。

例如,看下面的代码:

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

【讨论】:

【参考方案4】:

确保你没有使用原生 smack jar,它不会在 android 上运行尝试使用 asmack 或其祖先之一android-and-xmpp-currently-available-solutions

【讨论】:

【参考方案5】:

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

【讨论】:

我在将 android 虚拟设备连接到 xmpp 服务器时遇到问题。我正在使用这个code 连接到xmpp,我得到exception,你能告诉任何解决方案吗?

以上是关于无法将 Android 客户端与本地 XMPP 服务器连接的主要内容,如果未能解决你的问题,请参考以下文章

XMPP 与 Android 交互

无法使用 aSmack 连接到本地 XMPP 服务器

如何创建nodejs xmpp服务器和android xmpp客户端

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

无法将 Gloox Xmpp 客户端连接到 Openfire 服务器

XMPP SMACK 文件接收无法在 android 上运行