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

简介

使用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(二)

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值