Smack ejabberd连接错误

时间:2015-09-03 18:57:12

标签: ejabberd smack

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

    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。任何人都可以给出一个简单的例子吗?

1 个答案:

答案 0 :(得分:1)

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

e.g。来自默认的ejabberd.cfg文件

%%主机名

{hosts,[“localhost”]}。

==> localhost 设置为服务名称

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

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

e.g。来自默认的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 restart