1

我正在尝试使用 asmack 在 Android 上编写一个简单的 XMPP 应用程序,但我遇到了一个问题,即我无法登录多个 jabber 服务器。例如,我无法登录到我的测试 Openfire 服务器,尽管代码在 jabber.org 帐户下运行良好。

登录代码:

public void login() throws XMPPException
{
    if (connection != null && connection.isConnected())
    {
        try 
        {
            Random generator = new Random();
            int resource_int = generator.nextInt();
            connection.login(USERNAME, PASSWORD, 
                             "Smack_" + Integer.toString(resource_int));
        } 
        catch (XMPPException e) 
        {
            e.printStackTrace();
            connection.disconnect();
            setConnection(null);
            throw e;
        }
        Roster.setDefaultSubscriptionMode(Roster.SubscriptionMode.accept_all);
    }
}

正如我所说,它适用于 jabber.org,但 Openfire 返回not-authorized(401)错误。我该如何解决?

4

2 回答 2

0

我从未使用过 Openfire,但我确定某处有一个日志文件 - 你可以发布它吗?

Android 中的 IIRC 某些安全功能(不确定是否用于 SSL 或 TLS)与 Smack 或 Asmack 不兼容,也许这就是问题所在。在这种情况下,有一种方法可以通过使用自己的 Socket 连接(而不是 Smack 包含的 SSL 功能)来解决它 - 要验证这一点,您可以将(XMPP 相关)代码移植到 PC 并使用标准 Smack 库。

另一点是,Android 有不同的 Smack 端口。我个人使用 Beem 项目中的 Asmack 端口(因为最初的 Asmack 有一些问题 - 但我不记得哪些问题了......)

但仍然......没有更多信息,我只能猜测。

于 2011-10-21T11:58:34.003 回答
0

您确定您在 OpenFire 服务器上拥有相同的帐户和密码吗?尝试使用与现有 XMPP 客户端相同的用户名和密码登录到您的服务器。将 Android 完全排除在外,并确保您可以先登录两台服务器。

于 2011-10-24T14:50:53.043 回答