当前位置: 代码迷 >> 综合 >> java+smack+openfire即时通讯Im(一)
  详细解决方案

java+smack+openfire即时通讯Im(一)

热度:14   发布时间:2023-12-17 19:12:54.0

java+smack+openfire即时通讯Im(一)

  • 简介
  • openfire服务器搭建
  • smack API文档以及相关jar包下载
  • 登录、注册
    • 初始化链接
    • 注册
    • 登录

简介

使用java+smack+openfire完成简单的即时通讯,包括登录、注册、添加好友、获取好友列表、获取离线信息等。

openfire服务器搭建

之前一篇文章已经写了服务器的搭建,以及一个简单的strophe.js连接openfire的web客户端。可以参考一下:
使用strophe.js连接openfire服务器实现web端即时通讯

smack API文档以及相关jar包下载

开发文档:smack java API文档
openfire这个东西确实很老了,所以文档说明也不是很多,而且是英文的,英文不好的可以使用浏览器的翻译将就一下把,还是勉强能看懂的。
用到的jar包的话就比较肯定得,我在这里也遇到了好多坑,一开始是在官网下的包,然后导入项目以后不是少这个就是少那个,就算包是对的,里面的方法也不全。所以后面都是一边写,然后看具体少那一个包,这样一个一个导进去。
给大家推荐一个搜包的网址:maven jar,一般的包都是能搜到的。
基本上就用到了下面的几个jar包:
smack的相关jar包
CSDN下载地址:smack相关jar包下载地址
下载好了以后放在项目的WEB-INF下的lib下,然后发布就可以了。

登录、注册

包全部导完以后就可以开始进行开发了

初始化链接

/***** <B>方法名称:</B>initOpenfireConnect<BR>* <B>概要说明:</B>初始化openfire连接<BR>** @param* @return org.jivesoftware.smack.tcp.XMPPTCPConnection** @author ZhangYH* @date 2020/4/1 13:59*/public static XMPPTCPConnection initOpenfireConnect() {
    XMPPTCPConnection  connection = null;try {
    XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder();//设置服务器名称configBuilder.setServiceName(OPENFIRE_SERVICE_NAME);//设置服务器地址(ip)configBuilder.setHost(OPENFIRE_HOST);//设置服务器端口configBuilder.setPort(OPENFIRE_PORT);configBuilder.setSecurityMode(XMPPTCPConnectionConfiguration.SecurityMode.disabled);//设置登录状态为离线(这个很重要,不设置的话,接收不到离线消息)configBuilder.setSendPresence(false);connection = new XMPPTCPConnection(configBuilder.build());// 连接服务器connection.connect();}catch (Exception e){
    e.printStackTrace();}return connection;}

把openfire服务器相关的信息设置进去,然后调用connect()方法就可以完成连接初始化了。

注册

/***** <B>方法名称:</B>openfireRegister<BR>* <B>概要说明:</B>用户注册<BR>** @param userName* @param password* @return void** @author ZhangYH* @date 2020/4/1 14:06*/public static void openfireRegister(String userName, String password){
    try {
    XMPPTCPConnection  connection = initOpenfireConnect();//创建用户AccountManager manager = AccountManager.getInstance(connection);manager.createAccount(userName, password);}catch (Exception e){
    e.printStackTrace();}}

登录

登录的话,初始化连接完了以后直接调用login()方法即可。

 XMPPTCPConnection  connection = initOpenfireConnect();connection.login(userName,password);

以上就是连接openfire完成登录、注册的全部过程了。其实最麻烦的就是导包的那个地方,因为现在网上版本很多很多,随便下载一个一下还不能用,没办法,只能一个一个导了。

完整代码:

package com.yonghon.smack.util;import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
import java.net.*;
import java.io.*;import org.apache.commons.lang3.StringUtils;
import org.jivesoftware.smack.chat.Chat;
import org.jivesoftware.smack.chat.ChatManager;
import org.jivesoftware.smack.packet.Presence;
import org.jivesoftware.smack.roster.Roster;
import org.jivesoftware.smack.roster.RosterEntry;
import org.jivesoftware.smack.tcp.XMPPTCPConnection;
import org.jivesoftware.smack.tcp.XMPPTCPConnectionConfiguration;
import org.jivesoftware.smackx.iqregister.AccountManager;
import org.jivesoftware.smackx.offline.OfflineMessageHeader;
import org.jivesoftware.smackx.offline.OfflineMessageManager;
import org.jivesoftware.smack.packet.Message;
import org.jivesoftware.smackx.pubsub.LeafNode;
import org.jivesoftware.smackx.pubsub.PubSubManager;
import org.jivesoftware.smackx.pubsub.Subscription;
import org.jivesoftware.smackx.pubsub.Item;
import org.jxmpp.jid.EntityBareJid;
import org.jxmpp.jid.impl.JidCreate;public class OpenfireUtils {
    //服务器名称private static String OPENFIRE_SERVICE_NAME = "YongHon";//地址private static String OPENFIRE_HOST = "127.0.0.1";//端口private static int OPENFIRE_PORT = 端口;//获取好友在线状态的URL地址private static String OPENFIRE_PRESENCE_URL = "http://Yonghon:9090/plugins/presence/status";/***** <B>方法名称:</B>initOpenfireConnect<BR>* <B>概要说明:</B>初始化openfire连接<BR>** @param* @return org.jivesoftware.smack.tcp.XMPPTCPConnection** @author ZhangYH* @date 2020/4/1 13:59*/public static XMPPTCPConnection initOpenfireConnect() {
    XMPPTCPConnection  connection = null;try {
    XMPPTCPConnectionConfiguration.Builder configBuilder = XMPPTCPConnectionConfiguration.builder();//设置服务器名称configBuilder.setServiceName(OPENFIRE_SERVICE_NAME);//设置服务器地址(ip)configBuilder.setHost(OPENFIRE_HOST);//设置服务器端口configBuilder.setPort(OPENFIRE_PORT);configBuilder.setSecurityMode(XMPPTCPConnectionConfiguration.SecurityMode.disabled);//设置登录状态为离线(这个很重要,不设置的话,接收不到离线消息)configBuilder.setSendPresence(false);connection = new XMPPTCPConnection(configBuilder.build());// 连接服务器connection.connect();//登录//connection.login(“userName”,“password”);}catch (Exception e){
    e.printStackTrace();}return connection;}/***** <B>方法名称:</B>closeConnection<BR>* <B>概要说明:</B>关闭连接<BR>** @param connection* @return void** @author ZhangYH* @date 2020/4/1 14:03*/public static void closeConnection(XMPPTCPConnection connection) {
    connection.disconnect();}/***** <B>方法名称:</B>openfireRegister<BR>* <B>概要说明:</B>用户注册<BR>** @param userName* @param password* @return void** @author ZhangYH* @date 2020/4/1 14:06*/public static void openfireRegister(String userName, String password){
    try {
    XMPPTCPConnection  connection = initOpenfireConnect();//创建用户AccountManager manager = AccountManager.getInstance(connection);manager.createAccount(userName, password);}catch (Exception e){
    e.printStackTrace();}}
}

上一篇:使用strophe.js连接openfire服务器实现web端即时通讯
下一篇:java+smack+openfire即时通讯Im(二)

  相关解决方案