`
kongshanxuelin
  • 浏览: 912171 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

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

QQ 
阅读更多

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

 

  • im.jar (1.8 MB)
  • 下载次数: 1036
11
1
分享到:
评论
9 楼 WOLAOU 2013-07-30  
要是有源代码做个研究就好了   531522276@qq.com
8 楼 SmileTears 2012-01-04  
请问下,用smack绑定msn账号,给msn发信息,msn可以收到,msn发回来就收不到,是为什么呀?
7 楼 tuoxie007 2010-01-29  
干嘛不把客户端代码也贴出来呀
谢谢LZ啦
6 楼 tongfan 2009-11-20  
怎么还有数据库连接呢都!!!!
5 楼 294347 2009-11-03  
运行出错,源代码也没有
4 楼 gridrender 2009-04-01  
楼主,能不能将您的源代码也共享一下啊。
让大家学习一下您的源代码,交流技术啊。
我的QQ:327524866
我也在做一个这样的客户端。
3 楼 nmj1987 2008-11-10  
我也想要源码学习一下,如果方便的话,请发到邮箱:niminjie1987@126.com。谢谢!
2 楼 lijjjjil 2008-10-24  
怎么调试啊。。。Lz能把其他源码发给我学习学习吗?谢谢!!!
sbuk@163.com
1 楼 menxin6095 2008-10-18  
谢谢了 收藏了

相关推荐

Global site tag (gtag.js) - Google Analytics