`
kongshanxuelin
  • 浏览: 926948 次
  • 性别: 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  
谢谢了 收藏了

相关推荐

    即时通信XMPP协议

    即时通信XMPP协议,全称为可扩展消息出席协议(Extensible Messaging and Presence Protocol),是一种基于XML的开放标准,设计用于实现实时通信和状态管理。该协议最初由Jabber开源社区于1999年开发,后来在2002年...

    基于XMPP的即时通信程序

    本项目“基于XMPP的即时通信程序”着重于使用XMPP(Extensible Messaging and Presence Protocol)协议来构建这样一个系统。XMPP是一种开放标准的协议,最初由Jabber项目开发,现已被IETF标准化,广泛应用于多种实时...

    XMPP.zip_XMPP即时通信_aioxmpp_xmpp _xmpp qq_即时通讯

    XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的开放标准协议,用于即时通信(IM)和在线状态服务。这个“XMPP.zip”文件显然包含了关于如何使用XMPP实现即时通讯,尤其是仿照QQ功能的相关资源...

    基于XMPP协议的Android即时通信应用项目源码

    本项目基于XMPP(Extensible Messaging and Presence Protocol)协议,这是一种开放标准的即时通讯协议,以其灵活性、可扩展性和安全性被许多开发者所青睐。 【XMPP协议详解】 XMPP是由IETF(Internet Engineering...

    XMPP即时通信 协议

    XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的实时通信协议,被广泛应用于即时消息、在线状态管理和多方聊天等领域。这个文档集可能是对XMPP协议的详细解释,包括其核心概念、工作原理以及...

    基于xmpp协议的多端即时通讯

    1. 常见即时通讯软件:介绍XMPP协议在QQ、Facebook、Twitter、MSN Messenger等主流即时通讯软件中的应用。 2. 多端支持:XMPP协议支持多种设备和平台,包括PC、Pad、Phone和Web。 八、解决方案 1. 一个应用程序,...

    基于XMPP协议的Android即时通信系统设计

    XMPP协议具有开放性、灵活性和可扩展性等特点,支持点对点通信、群组聊天、文件传输等多种功能,同时支持多种设备之间的互联互通。由于其强大的功能和良好的兼容性,XMPP被广泛应用于各种即时通信场景中。 #### ...

    基于xmpp协议的多端即时通讯方案

    通过以上介绍,我们可以看到,基于XMPP协议的多端即时通讯方案不仅能够实现不同即时通信软件之间的互联互通,还能支持多种设备类型,为用户提供更加便捷、高效的沟通体验。同时,选择开源的Openfire作为服务器端,...

    类似QQ的xmpp协议聊天

    XMPP(Extensible Messaging and Presence Protocol,可扩展消息传递和存在协议)是一种基于XML的开放标准协议,最初设计用于实时通信和协作。XMPP的核心是Jabber协议,通过TCP/IP连接进行数据传输,支持一对一、一...

    基于XMPP协议的Android即时通信应用项目源码更新版本

    在即时通信领域,XMPP(Extensible Messaging and Presence Protocol)是一种广泛应用的开放标准协议,它基于XML,并且设计用于提供实时、双向通信服务。在这个基于XMPP协议的Android即时通信应用项目中,开发者构建...

    简单的基于XMPP协议的即时通信的实现

    标题 "简单的基于XMPP协议的即时通信的实现" 指出我们将探讨如何利用XMPP(Extensible Messaging and Presence Protocol)协议构建一个基础的即时通信系统。XMPP是一种基于XML的开放标准,常用于实现聊天、状态更新...

    XMPP协议中文参考指南

    在 XMPP 协议中,出席信息服务可以从即时消息服务中分离,例如,可以提供一个出席信息服务、一个即时消息服务或同时提供两者。XMPP 协议也提供了把出席信息服务和即时消息服务分离成为独立服务的可能性。 XMPP ...

    XMPP协议--即时通讯工具实现原理

    XMPP (Extensible Messaging and Presence Protocol) 是一种开放标准的即时通讯协议,它基于XML,设计用于提供实时通信和消息传递。XMPP的核心组件包括客户端、服务器和服务器之间的连接,使得用户可以进行一对一、...

    net平台 基于 XMPP协议的即时消息服务端简单实现

    XMPP(可扩展消息与存在协议)是一种基于XML的开放标准协议,主要用于即时通讯(IM)系统,文件传输,游戏引擎,物联网(IoT),以及一般实时交互应用程序。该协议的核心在于它的灵活性与可扩展性,它允许开发者构建...

    XMPP协议(可扩展消息出席协议):核心.doc

    ### XMPP协议(可扩展消息出席协议):核心知识点解析 #### 一、绪论 **1.1 概览** XMPP(可扩展消息和出席协议)是一种开放式的XML协议,旨在支持接近实时的消息传递、出席信息以及请求-响应服务。该协议的基本...

    android基于xmpp即时通信-高仿QQ

    在Android平台上实现基于XMPP(Extensible Messaging and Presence Protocol)的即时通信系统,可以让你创建一个类似QQ的应用,实现用户间的实时消息传递、在线状态显示等功能。以下是对这个主题的详细解析: 一、...

    XMPP即时聊天 QQ 微信

    以上知识是基于XMPP协议在Android上开发即时通讯应用的基础,通过阅读《Android之基于XMPP协议即时通讯软件》系列博客,可以深入了解每个环节的具体实现步骤和技巧。同时,提供的图片文件可能包含示例代码、界面截图...

    XMPP协议中文版

    XMPP(可扩展消息和出席信息协议)是一种开放式的基于XML(可扩展标记语言)的通信协议,专门用于实现实时消息传递和出席信息(即在线状态)的交换。XMPP的设计目标是创建一个通用、可扩展的框架,使网络上的设备和...

Global site tag (gtag.js) - Google Analytics