xmpp协议的使用

合集下载

SIP协议-XMPP协议及其应用

SIP协议-XMPP协议及其应用

2、可扩展性
XMPP协议是一种基于XML流元素的传输协议,由于所使用的XML技术本身就 是一种极具扩展性的标记语言,而XMPP协议订立的特点就是结构化的传输 XML元素。在只要满足XMPP协议传输的XML节元素结构之下,可以很容易的 添加新的属性或包含新的子节点来扩展现有的协议功能。这种自定义的结构,只 要是通过了通信双方的认可,都可以加入任何的新的元素或属性表达出新的特有 的功能信息。XSF正致力于订立出各种各样的XMPP协议的扩展协议XEP来不断 的满足即时通信和出席信息的新的需求。XEP协议的不断增加和完善,正是由于 XMPP良好的扩展性。
五、SIP协议应用
SIP协议在软交换中的应用
NGN是指下一代网络,是以当 前网络为基点的下一代网络。 它是在IP基础上对电话网、 Internet和有线电视网的融合, 也是对固定和移动网络的融合。 NGN能在目前的网络基础上提 供包括话音、数据、多媒体等 多种服务,还能把现在用于长 途电话的低资费IP电话引入本 地市话,有望大大降低本地通 话费的成本和价格。 作为NGN网络的核心技术,软 交换的发展因而受到越来越多 的关注,作为下一代网络的控 制功能模块,软交换为下一代 网络(NGN)具有实时性要求的 业务提供呼叫控制和连接控制 功能。
在整个软交换体系中,完成接续、控制功能的 信令协议起到核心作用,决定了业务提供能力的强 弱。IETF制订的新一代会话控制协议SIP (Session Initiation Protocol),具有简单、开放、 灵活、可扩展等多方面明显优点,成为下 一代网络 软交换体系的重要技术。
五、SIP协议应用
第二层
• 2、第二层是传输层。它定义了网络上一个客户机如何发送请求和接 收响应以及一个服务器如何接收请求和发送响应。所有的SIP元素 包含传输层。 • 3、第三层是事务层。事务是SIP的基本元素。一个事务是由客户机 事务发送给服务器事务的请求(使用传输层),以及对应该请求的从 服务器事务发送回客户机的所有响应组成 • 4、第四层事务用户层(TU)。每个SIP实体,除了无状态代理,都是 事务用户。当一个TU希望发送请求,它生成一个客户机事务实例并 且向它传递请求和IP地址,端口,和用来发送请求的传输机制

xmpp协议的使用

xmpp协议的使用

在android里面用的smack包其实叫做asmack,该包提供了两种不同的连接方式:socket和httpclient。

该并且提供了很多操作xmpp协议的API,也方便各种不同自定义协议的扩展。

我们不需要自己重新去定义一套接收机制来扩展新的协议,只需继承然后在类里处理自己的协议就可以了。

而本文今天主要说两点,一点就是消息是如何接收的,另一点就是消息是如何通知事件的。

总的思路1.使用socket连接服务器2.将XmlPullParser的数据源关联到socket的InputStream3.启动线程不断循环处理消息4.将接收到的消息解析xml处理封装好成一个Packet包5.将包广播给所有注册事件监听的类逐步击破(声明在看下面的文章时,最好先理解一下smack的使用,这样才能达到深入的理解)(谨记:上图只显示本文章解释所要用到的类和方法,减缩了一些跟本文主题无关的代码,只留一条贯穿着从建立连接到接收消息的线。

)解析这块东西打算从最初的调用开始作为入口,抽丝剥茧,逐步揭开。

1.PacketListener packetListener = new PacketListener() {@Overridepublic void processPacket(Packet packet) {System.out.println("Activity----processPacket"+ packet.toXML());}};PacketFilter packetFilter = new PacketFilter() {@Overridepublic boolean accept(Packet packet) {System.out.println("Activity----accept"+packet.toXML());return true;}};解释:创建包的监听以及包的过滤,当有消息到时就会广播到所有注册的监听,当然前提是要通过packetFilter的过滤。

XMPP协议即时通讯(Openfire服务器版)

XMPP协议即时通讯(Openfire服务器版)

XMPP协议即时通讯(Openfire服务器版)一、什么是XMPPXMPP(Extensible Messageing and Presence Protocol:可扩展消息与存在协议)是目前主流的IM(IM:instant messaging,即时消息)协议之一。

XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML 环境中灵活的发展性。

XMPP中定义了三个角色,客户端,服务器,网关。

通信能够在这三者的任意两个之间双向发生。

服务器同时承担了客户端信息记录,连接管理和信息的路由功能。

网关承担着与异构即时通信系统的互联互通,异构系统可以包括SMS(短信),MSN,ICQ 等。

XMPP即时通信协议,采用C/S体系结构。

基本的网络形式是客户端连接到服务器,然后由服务器去连接到另一个客户端进行两个客户端之间的通信。

而他们传输的是XML流。

XMPP工作原理说明: 所有从一个客户端到另一个客户端的消息和数据都要通过服务器。

1、客户端连接服务器2、服务器利用本地目录系统的证书对其认证3、客户端制定目标地址,让服务器告知目标状态4、服务器查找,连接并进行相互认证5、客户端间进行交互二、搭建服务器(Openfire)通过上述的了解,我们知道要想进行通信,我们必须要有一个服务器。

服务器端采用Openfire作为服务器。

允许多个客户端同时登录并且并发的连接到一个服务器上。

服务器对每个客户端的连接进行认证,对认证通过的客户端创建会话,客户端与服务器端之间的通信就在该会话的上下文中进行。

首先安装Openfire点击继续点击安装安装成功后再偏好设置中就会有Openfire的图标。

点击Openfire的图标如果第一次安装Openfire,会发现Openfire的状态是停止的。

点击StartOpenfire,开启Openfire服务器注:如果Openfire一直打不开,请参考:/winer888/article/details/49886281当Status成为Running。

xmpp协议详解一:xmpp基本概念

xmpp协议详解一:xmpp基本概念

xmpp协议详解一:xmpp基本概念概述XMPP是一个开放式的XML协议,设计用于准实时消息和出席信息以及请求-响应服务。

通用的架构通常采用客户端服务器架构进行实现,其中客户端通过TCP方式使用XMPP访问服务器,服务器之间也采用TCP方式进行通信。

xmpp通用架构服务器充当xmpp通信的一个智能抽象层,负责•对受验证的客户端,服务器以及其他实体之间以xml流的形式的连接和会话进行管理。

•在这些实体间使用xml流对合理编址的xml节进行路由•存储和处理客户端使用的数据客户端通过TCP连接直接连接到服务器,并通过xmpp获得由服务器以及联合服务器所提供的全部功能。

多个不同的客户端可以同时登陆并且并发的连接到一个服务器,每个不同资源的客户端通过xmpp地址的资源标识符来区分。

建议的客户端和服务器连接的端口时5222网关网关是一个特殊用途的服务器端的服务,主要功能是把xmpp翻译成外部消息系统,并把返回的消息翻译成xmpp.网络每个服务器都是由一个网络地址来标识的并且服务器之间的通信是客户-服务器协议的直接拓展。

任意两个服务器之间的通信是可选的,如果被激活,那么这种通信应该通过XML流绑定到TCP连接上进行。

建议的服务器和服务器连接的端口时5269注xmpp系统涉及更多的域间连接,当你给不在同一个域中的联系人发送xmpp消息时,你的客户端连接到你的“家用”服务器,然后直接连接到你的联系人的服务器,而没有中间跳过。

地址空间概述因为xmpp通讯实在网络上,所以每个xmpp实体都需要一个地址,称为JabberID(JID)。

一个合法的JID包括一组排列好的元素,包括域名(domain identifier), 节点名(node identifier), 和资源名(resource identifier)。

user@host/resource这种结构,最常用来标识一个即时消息用户,这个用户所连接的服务器,以及这个用户用于连接对资源。

xmpp协议详解

xmpp协议详解

xmpp协议详解摘要:此文档定义了可扩展消息出席协议(XMPP)的核心特性:协议使用XML元素在任意两个网络端点间近实时的交换结构化信息。

当XMPP为交换XML数据提供一般化,可扩展的框架时,它主要用于建立满足RFC2779的即时消息与出席应用的需求。

1 介绍1.1 概要XMPP是一个开放的可扩展标记语言[XML]协议,用于近实时的消息、出席与请求-响应服务。

基本语法语义最初是由Jabber开源社区在1999年开发的。

2002年,XMPP工作组授权开发一个Jabber协议的改写本,将适用于IETF的即时消息(IM)与出席技术。

作为XMPP工作组的成果,此文档定义了XMPP 1.0的核心内容;提供即时消息与出席功能的扩展需求定义在RFC2779[IM-REQS]中,由XMPP:即时消息与出席[XMPP-IM]指定。

1.2 术语文档中的大写关键字:"MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", "OPTIONAL"在BCP14, 在RFC 2119 [TERMS]中描述。

2 一般架构2.1 概述虽然XMPP并未与任何特定网络架构结合,但到目前为止,它大致上已经由一个客户-服务器的架构实现了。

其中,客户端利用XMPP访问基于[TCP]连接的一个服务器,并且,服务器间也通过TCP连接进行彼此间的通信。

XMPPClient------------Server------------ServerTCP TCP下图为此架构的高层视图(“-”表示使用XMPP通信,“=”表示使用任何其它协议通信)C1----S1---S2---C3|C2----+--G1===FN1===FC1符号表示如下:1)C1,C2,C3 = XMPP客户端2)S1,S2 = XMPP服务器3)G1 = 网关:在XMPP与外部协议(非XMPP)的消息网络间转换。

RFC3920(XMPP协议)中文版

RFC3920(XMPP协议)中文版

RFC3920可扩展的消息和出席信息协议(GMPP):核心协议关于本文的说明本文为互联网社区定义了一个互联网标准跟踪协议,并且申请讨论协议和提出了改进的建议。

请参照“互联网官方协议标准”的最新版本( STD1 )获得这个协议的标准化进程和状态。

本文可以不受限制的分发。

版权声明本文版权属于互联网社区(C)TheInternetSocietP(20GG).摘要本文定义了可扩展消息和出席信息协议(GMPP )的核心功能,这个协议采用 GML流实现在任意两个网络终端接近实时的交换结构化信息。

GMPP提供一个通用的可扩展的框架来交换GML数据,它主要用来建立即时消息和出席信息应用以实现RFC2779的需求。

目录1. 绪论2. 通用的架构3. 地址空间4. GML 流5. TLS的使用6. SASL的使用7. 资源绑定8. 服务器回拨9. GML 节10. 服务器处理GML节的规则11. GMPP中的GML用法12. 核心的兼容性要求13. 国际化事项14. 安全性事项15. IANA 事项16. 参考1. 绪论1.1. 概览GMPP是一个开放式的GML协议,设计用于准实时消息和出席信息以及请求- 响应服务。

其基本的语法和语义最初主要是由Jabber开放源代码社区于1999年开发的。

20GG年,GMPP工作组被授权接手开发和改编 Jabber协议以适应 IETF的消息和出席信息技术。

作为GMPP工作组的成果,本文定义了 GMPP1.0 的核心功能;在RFC2779[IMP-REQS]中指定的提供即时消息和出席信息功能的扩展,定义在GMPP-IM 协议[theEGte nsibleMessagi ngan dPrese nceProtocol(GMPP):l nsta ntMessagi ng andPresenee]中。

1.2. 术语本文中大写的关键字"MUST","MUSTNOT","REQUIRED","SHALL","SHALLNOT","SHOULD","SH OULDNOT","RECOMMENDED","MAP", 和"OPTIONAL"的确切含义符合BCP14,RFC2119[TERMS].2. 通用的架构2.1. 概览尽管GMPP没有结合任何特定的网络结构,通常认为它是客户-服务器架构的一种实现,在这里客户端用GMPP的方式访问服务器采用的是TCP连接,服务器之间的通信也是TCP连接。

RFC3920(XMPP协议)中文版

RFC3920(XMPP协议)中文版

RFC3920可扩展的消息和出席信息协议 (XMPP): 核心协议关于本文的说明本文为互联网社区定义了一个互联网标准跟踪协议,并且申请讨论协议和提出了改进的建议。

请参照“互联网官方协议标准”的最新版本(STD 1)获得这个协议的标准化进程和状态。

本文可以不受限制的分发。

版权声明本文版权属于互联网社区 (C) The Internet Society (2004).摘要本文定义了可扩展消息和出席信息协议(XMPP)的核心功能,这个协议采用XML 流实现在任意两个网络终端接近实时的交换结构化信息。

XMPP提供一个通用的可扩展的框架来交换XML数据,它主要用来建立即时消息和出席信息应用以实现RFC 2779 的需求。

目录1.绪论2.通用的架构3.地址空间4.XML流5.TLS的使用6.SASL的使用7.资源绑定8.服务器回拨9.XML节10.服务器处理XML节的规则11.XMPP中的XML用法12.核心的兼容性要求13.国际化事项14.安全性事项15.IANA事项16.参考1. 绪论1.1. 概览XMPP是一个开放式的XML协议,设计用于准实时消息和出席信息以及请求-响应服务。

其基本的语法和语义最初主要是由Jabber开放源代码社区于1999年开发的。

2002年,XMPP工作组被授权接手开发和改编Jabber协议以适应IETF的消息和出席信息技术。

作为XMPP工作组的成果,本文定义了 XMPP 1.0 的核心功能;在 RFC 2779 [IMP-REQS] 中指定的提供即时消息和出席信息功能的扩展,定义在 XMPP-IM 协议 [the Extensible Messaging and Presence Protocol (XMPP): Instant Messaging and Presence] 中。

1.2. 术语本文中大写的关键字 "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", 和 "OPTIONAL" 的确切含义符合 BCP 14, RFC 2119 [TERMS].2. 通用的架构2.1. 概览尽管XMPP没有结合任何特定的网络结构,通常认为它是客户-服务器架构的一种实现,在这里客户端用XMPP的方式访问服务器采用的是TCP连接,服务器之间的通信也是TCP连接。

XMPP与TLS安全协议简介

XMPP与TLS安全协议简介

XMPP与TLS安全协议简介XMPP(Extensible Messaging and Presence Protocol)是一种开放的标准通信协议,用于实时的基于XML(可扩展标记语言)的消息传输和在线状态监测。

而TLS(Transport Layer Security)是一种加密通信协议,用于保护互联网通信的安全性。

本文将简要介绍XMPP和TLS协议以及它们在保障通信安全方面的重要性。

一、XMPP简介XMPP是一种开放的、分布式的协议,最初用于即时通讯(IM)系统。

它通过基于XML的消息格式,使得用户能够实时地发送文本、音频、视频和其他形式的多媒体内容。

XMPP协议具有灵活、可扩展的特点,可以适应不同的业务需求。

它支持用户认证、状态通知、好友列表管理等功能,使得各种即时通讯应用得以实现。

二、TLS简介TLS(Transport Layer Security)是一种设计用于保护通信安全的加密协议。

其前身是SSL(Secure Sockets Layer),目前TLS已经成为SSL的更安全的继任者。

TLS协议通过在通信双方之间建立安全的连接,保护数据在传输过程中不被窃听、篡改或伪造。

TLS协议提供了许多安全机制,包括数据加密、身份验证和完整性检查等。

它使用了非对称加密和对称加密相结合的方式,确保了通信过程中的保密性和完整性。

TLS的广泛应用使得网页浏览、电子邮件、即时通讯等互联网应用能够在保护用户隐私的前提下进行。

三、XMPP与TLS协议XMPP协议本身并不具备数据加密和身份验证等安全机制,因此在实际应用中往往需要与TLS协议结合使用,以保障通信的安全性。

通过在XMPP与客户端之间建立TLS连接,通信双方之间的数据传输将得到加密保护,确保敏感信息不会被黑客窃取。

同时,TLS协议还提供了数字证书验证机制,用于验证通信双方的身份,防止中间人攻击。

使用TLS协议的XMPP通信可以保证数据传输的机密性和完整性,并且能够确认消息发送方的身份,增强通信的可信度和安全性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在android里面用的smack包其实叫做asmack,该包提供了两种不同的连接方式:socket和httpclient。

该并且提供了很多操作xmpp协议的API,也方便各种不同自定义协议的扩展。

我们不需要自己重新去定义一套接收机制来扩展新的协议,只需继承然后在类里处理自己的协议就可以了。

而本文今天主要说两点,一点就是消息是如何接收的,另一点就是消息是如何通知事件的。

总的思路1.使用socket连接服务器2.将XmlPullParser的数据源关联到socket的InputStream3.启动线程不断循环处理消息4.将接收到的消息解析xml处理封装好成一个Packet包5.将包广播给所有注册事件监听的类逐步击破(声明在看下面的文章时,最好先理解一下smack的使用,这样才能达到深入的理解)(谨记:上图只显示本文章解释所要用到的类和方法,减缩了一些跟本文主题无关的代码,只留一条贯穿着从建立连接到接收消息的线。

)解析这块东西打算从最初的调用开始作为入口,抽丝剥茧,逐步揭开。

1.PacketListener packetListener = new PacketListener() {@Overridepublic void processPacket(Packet packet) {System.out.println("Activity----processPacket"+ packet.toXML());}};PacketFilter packetFilter = new PacketFilter() {@Overridepublic boolean accept(Packet packet) {System.out.println("Activity----accept"+packet.toXML());return true;}};解释:创建包的监听以及包的过滤,当有消息到时就会广播到所有注册的监听,当然前提是要通过packetFilter的过滤。

2.connection = new XMPPConnection();XMPPConnection在这构造函数里面主要配置ip地址和端口(super(new ConnectionConfiguration("169.254.141.109", 9991));)3.connection.addPacketListener(packetListener, packetFilter);connection.connect();注册监听,开始初始化连接。

4.public void connect() {// Stablishes the connection, readers and writersconnectUsingConfiguration(config);}5.private void connectUsingConfiguration(ConnectionConfigurationconfig) {String host = config.getHost();int port = config.getPort();try{this.socket= new Socket(host, port);} catch(UnknownHostException e) {e.printStackTrace();} catch(IOException e) {e.printStackTrace();}initConnection();}通过之前设置的ip和端口,建立socket对象6.protected void initDebugger() {Class<?> debuggerClass = null;try{debuggerClass = Class.forName("com.simualteSmack.ConsoleDebugger");Constructor<?> constructor = debuggerClass.getConstructor(Connection.class, Writer.class, Reader.class);debugger= (SmackDebugger) constructor.newInstance(this, writer,reader);reader= debugger.getReader();} catch(ClassNotFoundException e1) {//TODO Auto-generated catch blocke1.printStackTrace();} catch(Exception e) {throw new IllegalArgumentException("Can't initialize the configured debugger!", e);}}private void initReaderAndWriter() {try{reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));} catch(UnsupportedEncodingException e) {//TODO Auto-generated catch blocke.printStackTrace();} catch(IOException e) {//TODO Auto-generated catch blocke.printStackTrace();}initDebugger();}private void initConnection() {// Set the reader and writer instance variablesinitReaderAndWriter();packetReader = new PacketReader(this);addPacketListener(debugger.getReaderListener(), null);// Start the packet reader. The startup() method will block until we// get an opening stream packet back from server.packetReader.startup();}从三个方法可以看出,建立reader和writer的对象关联到socket的InputStream,实例化ConsoleDebugger,该类主要是打印出接收到的消息,给reader设置了一个消息的监听。

接着建立PacketReader对象,并启动。

PacketReader主要负责消息的处理和通知7.public class PacketReader {Private ExecutorService listenerExecutor;private boolean done;Private XMPPConnection connection;Private XmlPullParser parser;Private Thread readerThread;Protected PacketReader(final XMPPConnection connection) {this.connection= connection;this.init();}/*** Initializes the reader in order to be used. The reader is initialized* during the first connection and when reconnecting due to an abruptly * disconnection.*/protected void init() {done= false;readerThread= new Thread() {public void run() {parsePackets(this);}};readerThread.setName("Smack Packet Reader ");readerThread.setDaemon(true);// create an executor to deliver incoming packets to listeners.// we will use a single thread with an unbounded queue.listenerExecutor= Executors.newSingleThreadExecutor(new ThreadFactory() {@Overridepublic Thread newThread(Runnable r) {Thread thread = new Thread(r,"smack listener processor");thread.setDaemon(true);return thread;}});resetParser();}/*** Starts the packet reader thread and returns once a connection to the * server has been established. A connection will be attempted for a maximum* of five seconds. An XMPPException will be thrown if the connection fails.**/public void startup() {readerThread.start();}/*** Shuts the packet reader down.*/public void shutdown() {done= true;// Shut down the listener executor.listenerExecutor.shutdown();}private void resetParser() {try{parser=XmlPullParserFactory.newInstance().newPullParser();parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, true);parser.setInput(connection.reader);} catch(XmlPullParserException xppe) {xppe.printStackTrace();}}/*** Parse top-level packets in order to process them further.**@param thread* the thread that is being used by the reader to parse incoming * packets.*/private void parsePackets(Thread thread) {try{Int eventType = parser.getEventType();do{if(eventType == XmlPullParser.START_TAG) {if(parser.getName().equals("message")) { processPacket(PacketParserUtils.parseMessage(parser));}System.out.println("START_TAG");} else if(eventType == XmlPullParser.END_TAG) {System.out.println("END_TAG");}eventType = parser.next();} while(!done&& eventType != XmlPullParser.END_DOCUMENT&& thread == readerThread);} catch(Exception e) {e.printStackTrace();if(!done) {}}}private void processPacket(Packet packet) {if(packet == null) {return;}// Loop through all collectors and notify the appropriate ones.for(PacketCollector collector : connection.getPacketCollectors()) {collector.processPacket(packet);}// Deliver the incoming packet to listeners.listenerExecutor.submit(new ListenerNotification(packet));}/*** A runnable to notify all listeners of a packet.*/private class ListenerNotification implements Runnable {Private Packet packet;Public ListenerNotification(Packet packet) {this.packet= packet;}public void run() {for(ListenerWrapper listenerWrapper : connection.recvListeners.values()) {listenerWrapper.notifyListener(packet);}}}}创建该类时就初始化线程和ExecutorService ,接着调用resetParser() 方法为parser 设置输入源(这里是重点,parser的数据都是通过这里获取),调用startup启动线程,循环监听parser,如果接收到消息根据消息协议的不同将调用PacketParserUtils类里的不同方法,这里调用parseMessage()该方法主要处理message的消息,在该方法里分析message消息并返回packet包。

相关文档
最新文档