运行环境:JDK1.4+
第三方包:Smack(Openfire服务器官方提供)
XMPP服务器:Openfire 3.6
特点:可直接与QQ,MSN,Gtalk等账号绑定,可直接与QQ,Gtalk,MSN等聊天工具互通
通过这个Java程序,让大家首先先了解一下基于XMPP协议的即时通信的基本原理,希望大家通过界面上的报文了解通信的远离,我先抛砖引玉一下,
 
核心源码:
package com.nbhj.im;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import org.jivesoftware.smack.ConnectionConfiguration;
import org.jivesoftware.smack.Roster;
import org.jivesoftware.smack.RosterEntry;
import org.jivesoftware.smack.RosterGroup;
import org.jivesoftware.smack.XMPPConnection;
import org.jivesoftware.smack.XMPPException;
public class IMServer {
    private ConnectionConfiguration connectionConfig;
    private XMPPConnection connection;
    private Roster roster;
    private boolean loginState;
    private Listener listener;
    /**
     * 构造 IMServer(serviceName)
     */
    public IMServer(String serviceName) {
        connectionConfig = new ConnectionConfiguration(serviceName);
        connection = new XMPPConnection(connectionConfig);
        listener=new Listener();
        try {
            connection.connect();
        } catch (XMPPException e) {
            e.printStackTrace();
        }
    }
    /**
     * 构造 IMServer(host,port)
     */
    public IMServer(String host, String port) {
        connectionConfig = new ConnectionConfiguration(host, Integer
                .parseInt(port));
        connection = new XMPPConnection(connectionConfig);
        listener=new Listener();
        try {
            connection.connect();
        } catch (XMPPException e) {
            e.printStackTrace();
        }
    }
    /**
     * 构造 IMServer(host port serviceName)
     */
    public IMServer(String host, int port, String serviceName) {
        connectionConfig = new ConnectionConfiguration(host, port, serviceName);
        connection = new XMPPConnection(connectionConfig);
        listener=new Listener();
        
        try {
            connection.connect();
            
        } catch (XMPPException e) {
            e.printStackTrace();
        }
    }
    /**
     * 账户登陆 Server
     * 
     * @return boolean
     */
    public boolean loginServer(String userName, String userPswd) {
        try {
            connection.login(userName, userPswd);
            loginState = true;
            roster = connection.getRoster();
            
            listener.regConnectionListener(connection);
            listener.regPackListener(connection);
            listener.onlineServer(connection);
            listener.regRosterListener(roster);
        } catch (XMPPException e) {
            e.printStackTrace();
        }
        return loginState;
    }
    
    
    /**
     * 注册新账号
     * 
     * @return boolean
     */
    public boolean createAccount(String regUserName, String regUserPswd) {
        try {
            connection.getAccountManager().createAccount(regUserName,
                    regUserPswd);
            return true;
        } catch (XMPPException e) {
            e.printStackTrace();
            return false;
        }
    }
    /**
     * 账户退出 Server
     * 
     * @return boolean
     */
    public boolean logoutServer() {
        if (loginState) {
            connection.disconnect();
            listener.stopOnlineThread();
            loginState = false;
        }
        return !loginState;
    }
    /**
     * 返回所有用户信息 <RosterEntry>
     * 
     * @return List(RosterEntry)
     */
    public List<RosterEntry> getOnlineEntries() {
        List<RosterEntry> EntriesList = new ArrayList<RosterEntry>();
        Collection<RosterEntry> rosterEntry = roster.getEntries();
        Iterator<RosterEntry> i = rosterEntry.iterator();
        while (i.hasNext()){
        
            EntriesList.add(i.next());
        }
        return EntriesList;
    }
    /**
     * 返回所有用户信息 <RosterEntry>
     * 
     * @return List(RosterEntry)
     */
    public List<RosterEntry> getAllEntries() {
        List<RosterEntry> EntriesList = new ArrayList<RosterEntry>();
        Collection<RosterEntry> rosterEntry = roster.getEntries();
        Iterator<RosterEntry> i = rosterEntry.iterator();
        while (i.hasNext())
            EntriesList.add(i.next());
        return EntriesList;
    }
    /**
     * 返回相应(groupName)组里的所有用户<RosterEntry>
     * 
     * @return List(RosterEntry)
     */
    public List<RosterEntry> getEntriesByGroup(String groupName) {
        List<RosterEntry> EntriesList = new ArrayList<RosterEntry>();
        RosterGroup rosterGroup = roster.getGroup(groupName);
        Collection<RosterEntry> rosterEntry = rosterGroup.getEntries();
        Iterator<RosterEntry> i = rosterEntry.iterator();
        while (i.hasNext())
            EntriesList.add(i.next());
        return EntriesList;
    }
    /**
     * 返回所有组信息 <RosterGroup>
     * 
     * @return List(RosterGroup)
     */
    public List<RosterGroup> getGroups() {
        List<RosterGroup> groupsList = new ArrayList<RosterGroup>();
        Collection<RosterGroup> rosterGroup = roster.getGroups();
        Iterator<RosterGroup> i = rosterGroup.iterator();
        while (i.hasNext())
            groupsList.add(i.next());
        return groupsList;
    }
    /**
     * @return connection
     */
    public XMPPConnection getConnection() {
        return connection;
    }
    /**
     * @return loginState
     */
    public boolean getLoginState() {
        return loginState;
    }
    /**
     * @return roster
     */
    public Roster getRoster() {
        return roster;
    }
}
	posted on 2008-12-09 13:28 
墙头草 阅读(4957) 
评论(5)  编辑  收藏