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端即時通訊

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章