即时通信XMPP协议示例程序(可与QQ,MSN等互通)

即时通信XMPP协议示例程序(可与QQ,MSN等互通)

运行环境: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;
    }
}


你可能感兴趣的:(即时通信XMPP协议示例程序(可与QQ,MSN等互通))