posts - 241,  comments - 116,  trackbacks - 0

运行环境: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 墙头草 阅读(4939) 评论(5)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航:
 
人人游戏网 软件开发网 货运专家