Smack ejabberd 连接错误

Smack ejabberd connection error

我正在寻找一个使用 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。什么是 servicename & host。谁能举个简单的例子?

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

例如来自默认 ejabberd.cfg 文件

%% 主机名

{主机,["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},

    {整形器,c2s_shaper},

    {max_stanza_size, 65536},

    starttls,{certfile,“/etc/ejabberd/newcert.pem”}

    ]},

    {s2s_use_starttls, 真}.

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

  3. 重启服务

    sudo 服务 ejabberd 重启