【问题标题】:Smack ejabberd connection errorSmack ejabberd 连接错误
【发布时间】:2015-09-03 18:57:12
【问题描述】:

我正在寻找一个使用smack java 客户端连接ejabbered 的简单示例。这是我尝试过的东西

    XMPPTCPConnectionConfiguration.Builder builder = XMPPTCPConnectionConfiguration.builder();
    builder.setUsernameAndPassword("admin1@ejab", "123456");
    builder.setServiceName("ejab");
    builder.setHost("localhost");     
    builder.setPort(5280);

    XMPPTCPConnectionConfiguration build = builder.build();

       AbstractXMPPConnection conn1 = new XMPPTCPConnection(build);
       conn1.connect();              

我来了

org.jivesoftware.smack.SmackException$NoResponseException: No response received within reply timeout. Timeout was 5000ms (~5s). Used filter: No filter used or filter was 'null'

我可以浏览 http://localhost:5280/admin 。什么是servicenamehost。谁能举个简单的例子?

【问题讨论】:

    标签: ejabberd smack


    【解决方案1】:

    根据 smack API,setServiceName 参数应该是 XMPP 服务的域,因此,在您的情况下,它应该是“ejab”(我想帐户“admin1@ejab”在 ejabberd 中设置正确)。您可以查看 ejabberd.cfg 文件中的主机名部分。

    例如来自默认的 ejabberd.cfg 文件

    %% 主机名

    {hosts, ["localhost"]}.

    ==> localhost 设置为服务名

    setHost 函数参数应该是服务器 IP 地址或 DNS 可解析的服务器名称。从你的描述来看,你使用 localhost 访问 ejabberd 管理页面,使用安装 ejabberd 的计算机 IP 地址会更简单。

    另外,setPort 应该是 ejabberd 侦听的端口,其默认值为 5222 而不是 5280(5280 用于通过 Web 进行管理)。您可以检查 ejabberd.cfg 文件中的侦听端口来确认。

    例如来自默认的 ejabberd.cfg 文件

    {听着,

    [

    {5222,ejabberd_c2s,[ .........

    以下是添加自签名证书以便 smack 可以使用的步骤。 (注意:我使用 ubuntu 服务器执行以下安装了 openssl 的命令。)

    1. 创建证书

      openssl req -new -x509 -newkey rsa:1024 -days 3650 -keyout privkey.pem -out server.pem

      openssl rsa -in privkey.pem -out privkey.pem

      cat privkey.pem >> server.pem

      openssl rsa -in server.pem -out newcert.pem

      openssl x509 -in server.pem >>newcert.pem

      sudo cp newcert.pem /etc/ejabberd/

    2. 修改 ejabberd.cfg 以使用证书

      {5222, ejabberd_c2s, [

                       {access, c2s},

                      {shaper, c2s_shaper},

                      {max_stanza_size, 65536},

                      starttls, {certfile, "/etc/ejabberd/newcert.pem"}

                      ]},

      {s2s_use_starttls, true}。

      {s2s_certfile, "/etc/ejabberd/newcert.pem"}.

    3. 重启服务

      sudo service ejabberd 重启

    【讨论】:

    • 现在我得到`PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException:无法找到请求目标的有效认证路径`
    • builder.setSecurityMode(SecurityMode.disabled); 修复了PKIX path ..... 的问题,将端口设置为 5222 修复了 smack 连接的问题
    • 如果您不想禁用安全性,您可以创建一个自签名证书。在您将服务器公开之前,它会让您更加了解并避免那些烦人的异常。
    猜你喜欢
    • 1970-01-01
    • 2017-11-25
    • 1970-01-01
    • 2015-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 2016-07-22
    相关资源
    最近更新 更多