当前位置: 首页 > 知识库问答 >
问题:

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

田英卓
2023-03-14
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个答案

那博瀚
2023-03-14

首先,我发现这不是关于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.

我用下面的代码解决了这个问题。我希望这能帮助其他人。

public class MainActivity extends 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();
        }
    }
}
班浩皛
2023-03-14

您尝试发送消息了吗?您确定您没有连接吗?您在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();
}
 类似资料:
  • 问题内容: 我正在尝试使用smack 4.1.0运行此代码 这给我一个错误: 并且,在本地openfire服务器中启用调试后,我收到以下消息: 我要去哪里错了? 问题答案: 根据与用户问题的讨论,AS位于XMPPTCPConnectionConfiguration中。默认情况下,Openfire中的端口5223是客户端SSL端口, 服务器>>服务器设置>>客户端连接 错误 org.jivesoft

  • 我正在阅读有关C中线程的教程并测试了以下代码: 我试图使用gcc和g编译此代码,但我总是遇到编译错误。 使用gcc-pthread thread_test.c: /tmp/ccmpQLyp。o: 在函数std::cout'thread_test.cpp: 你能帮忙吗?我必须做些什么才能让这段代码在Linux和Windows上运行吗?

  • 我是android开发的新手,在测试通过http连接发送短信并获得返回字符串时,我遇到了这个错误消息。下面是http API:

  • 我正在尝试运行以下Sqoop命令: 然而,我得到了这个错误: 17/02/04 00:04:53 警告安全。用户组信息: 特权行动例外作为:avinash (身份验证:简单) 原因:java.io.文件不发现异常: 文件不存在: hdfs://localhost:9000/home/avinash/sqoop-1.4.6.bin__hadoop-2.0.4-alpha/lib/slf4j-api-

  • 我是php服务器端和mysql的新手,有了一些基本的知识,最近安装wamp服务器和一些php文件和数据库创建,我正在尝试将我的android应用程序连接到运行mysql数据库的本地主机(就像一些webservice一样)。 因此,在浏览器中,我在url地址空间中键入,它将显示wampserver主页 但当我键入时,它显示了某个错误页面,我将附加错误页面的屏幕截图 这是屏幕 因此任何人都可以告诉我为

  • 这是我的配置: 我已经创建了play2test。mwb使用MySql workbench,我尝试了其他方法,如: 但总是会出现此错误:db的类型为STRING而不是OBJECT 在终端中: 我试图在 并添加了sbt依赖项: 但它没有工作:((((所以我怎么能解决它:(。 如果我的英语不好