openfire+smack 搭建即时聊天 demo

时间:2021-11-03 14:43:32
1.openfire
  openfire版本为 4.1.3
  关于openfire的配置网上有很多资料,可以找一个配置一下。
  这里遇到的问题是,我在配置的时候把端口号从9090,9091改为了19090,19091,导致配置完成的时候无法打开管理控制台,这里需要重启一下电脑


2.smack
smack的版本为4.2.0
  网上看到的建立链接的方式有下面两种
  一
   XMPPConnection connection = new XMPPConnection("wang-think");  
  二
   ConnectionConfiguration config = new ConnectionConfiguration("127.0.0.1", 5222);
   XMPPConnection connection = new XMPPConnection(config); 


但在4.2上无法使用。
通过看API和查阅一些错误,实现的是
        Builder config = XMPPTCPConnectionConfiguration.builder();
config.setHost("127.0.0.1");
config.setPort(5222);
DomainBareJid serviceName = JidCreate.domainBareFrom("bbb") ; //服务器名
config.setServiceName(serviceName);
config.setHostAddress(InetAddress.getByName("bbb")); //服务器名
config.setUsernameAndPassword("test1", "111111");
config.setResource("resource");
config.setSecurityMode(XMPPTCPConnectionConfiguration.SecurityMode.disabled);
XMPPTCPConnection xmppCon = new XMPPTCPConnection(config.build());
xmppCon.connect();
xmppCon.login();
上面的代码可以实现登陆


关于发送消息
EntityBareJid jid = JidCreate.entityBareFrom("aaa@bbb"); //需要链接的用户名@服务器名
Chat chat = chatManager.createChat(jid);
chat.getThreadID();
chat.sendMessage("test");


关于接收消息
添加一个监听
ChatManager chatManager = ChatManager.getInstanceFor(xmppCon);
ChatManagerListener chatManagerListener = new ChatManagerListener() {
       @Override
       public void chatCreated(Chat chat, boolean createdLocally) {
           chat.addMessageListener(new ChatMessageListener() {
               @Override
               public void processMessage(Chat chat, Message message) {
                   if(message.getBody()!=null)
                   {
                   System.out.println(message.getBody());
                   }
               }
           });
       }
   };
   chatManager.addChatListener(chatManagerListener);


如果写demo的话,注意后面加一个循环,避免程序结束,无法接收消息
while (true) {
       Thread.sleep(50);

   }

关于测试的话,可以用spark,比较方便。