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 的命令。)
创建证书
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/
修改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"}.
重启服务
sudo 服务 ejabberd 重启
我正在寻找一个使用 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 的命令。)
创建证书
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/
修改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"}.
重启服务
sudo 服务 ejabberd 重启