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包:
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(二)