xmpp协议的使用

合集下载

SIP协议-XMPP协议及其应用

SIP协议-XMPP协议及其应用

XMPP协议及其应用
2010年11月
内容

一 XMPP协议概述 二 XMPP协议特点


三 XMPP协议数据传输结构
四 XMPP协议网络结构 五 XMPP协议应用 六 XMPP协议与SIP协议对比
ห้องสมุดไป่ตู้
一、XMPP协议介绍
XMPP(可扩展消息处理现场协议)是基于可扩展 标记语言(XML)的协议,它继承了在XML环境中灵活 的发展性。 经过扩展以后的XMPP可以通过发送扩展的信息来处 理用户的需求,以及在XMPP的顶端建立如内容发布系统 和基于地址的服务等应用程序,它用于即时消息(IM) 以及在线现场探测。它在促进服务器之间的准即时操作。 这个协议可能最终允许因特网用户向因特网上的其他任 何人发送即时消息,即使其操作系统和浏览器不同。
平台 无关 性
XMPP 协议特 点
可扩 展性
安全 性
二、XMPP协议特点
1、开放性
• XMPP最初的原型协议Jabber的初衷就是构建一套免费的、开源的即时通信 协议。发展至今,被IETF订立为即时消息和出席信息技术标准,所订立的标 准协议是免费的、开源的和容易理解的。任何企业和个人都可以在所需要的 任何工程中使用XMPP协议。
三、XMPP协议数据传输结构
1、XML流
XML流是一个容器,包含了两个实体之间通过网络交换的XML元素。 一个XML流是由一个XML打开标签<stream>(包含适当的属性和名字空 间声明)开始的,XML流的结尾则是一个XML的关闭标签</stream>。 在流的整个生命周期,初始化它的实体可以通过流发送大量的XML元素, 用于流的控制信息和XML节信息。

网络协议知识:XMPP协议的工作原理和应用场景

网络协议知识:XMPP协议的工作原理和应用场景

网络协议知识:XMPP协议的工作原理和应用

场景

XMPP(Extensible Messaging and Presence Protocol,可扩展

消息和存在协议)是一种基于XML的开放式即时通讯协议。它最初被

设计为一种聊天协议,但现在已被广泛用于实时通信、平台之间通讯、物联网等多个领域。本文将为读者介绍XMPP协议的工作原理和应用场景。

一、XMPP协议的工作原理

XMPP协议基于客户端/服务器架构,允许用户之间进行实时通信。这些用户可能是个人,也可能是公司内部的员工或外部的供应商。XMPP的设计目标是灵活、可扩展,并且易于部署和使用。XMPP协议主

要由以下三部分组成:

1. Jabber XML Stream

这是XMPP通信的基础,它提供了两个实体之间沟通的一种规范化

方式。Jabber协议由一系列XML元素、属性和扩展构成,这些元素用

于交换信息和命令。

2. Jabber XML Stanza

Jabber协议使用“stanza”来描述不同类型的消息或命令。XML stanza包括三个主要部分:头部、正文和扩展。消息可以是文本或文件,如图片、视频和音频文件,也可以是命令,如在线状态更新和好

友添加请求。

3. XMPP服务器

XMPP服务器是整个协议的核心。它负责维护用户账户信息、处理

消息传输和控制通讯,还可以实现附加的功能扩展。

当两个XMPP客户端需要通信时,它们首先要连接到XMPP服务器,并进行身份验证。一旦认证成功,客户端可以建立一个XML流,开始

基于Jabber的通信。客户端通过发送XML命令和消息给服务器,并将

xmpp协议

xmpp协议

xmpp协议

XMPP协议。

XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的开放

式即时通讯协议,最初由Jabber开发并于2004年成为IETF标准。XMPP协议被设计用于实时通讯,包括即时消息传递、在线状态感知、多媒体会话等功能。它是一种面向开放网络的协议,任何人都可以使用并且可以通过扩展来满足特定的需求。

XMPP协议的核心是基于XML的消息传递,它允许在网络上发送和接收消息。这些消息可以包含文本、图片、音频、视频等多种形式的数据。XMPP协议还支持在线状态感知,用户可以知道其他用户的在线状态,例如在线、离线、忙碌等。这种实时的状态感知使得用户能够更好地进行沟通和协作。

除了基本的消息传递和在线状态感知功能,XMPP协议还支持多媒体会话。用

户可以通过XMPP协议进行语音通话、视频通话甚至是文件传输。这种多媒体会

话的支持使得XMPP协议成为了一种强大的实时通讯工具。

XMPP协议的另一个重要特性是其可扩展性。由于XMPP协议是基于XML的,因此可以通过扩展来满足特定的需求。这意味着开发者可以根据自己的需求来扩展XMPP协议,使其支持更多的功能。这种灵活性使得XMPP协议成为了一种非常

适合开发者的通讯协议。

在实际应用中,XMPP协议被广泛应用于即时通讯软件、社交网络、物联网等

领域。许多知名的即时通讯软件,如Google Talk、Facebook Messenger等都使用了XMPP协议。同时,XMPP协议也被应用于物联网领域,用于设备之间的通讯和数

xmpp协议的使用

xmpp协议的使用

在android里面用的smack包其实叫做asmack,该包提供了两种不同的连接方式:socket和httpclient。该并且提供了很多操作xmpp协议的API,也方便各种不同自定义协议的扩展。我们不需要自己重新去定义一套接收机制来扩展新的协议,只需继承然后在类里处理自己的协议就可以了。而本文今天主要说两点,一点就是消息是如何接收的,另一点就是消息是如何通知事件的。

总的思路

1.使用socket连接服务器

2.将XmlPullParser的数据源关联到socket的InputStream

3.启动线程不断循环处理消息

4.将接收到的消息解析xml处理封装好成一个Packet包

5.将包广播给所有注册事件监听的类

逐步击破

(声明在看下面的文章时,最好先理解一下smack的使用,这样才能达到深入的理解)

(谨记:上图只显示本文章解释所要用到的类和方法,减缩了一些跟本文主题无关的代码,只留一条贯穿着从建立连接到接收消息的线。)

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

1.

PacketListener packetListener = new PacketListener() {

@Override

public void processPacket(Packet packet) {

System.out

.println("Activity----processPacket"+ packet.toXML());

}

};

PacketFilter packetFilter = new PacketFilter() {

xmpp协议

xmpp协议

xmpp协议

XMPP协议:连接世界的桥梁

随着互联网的快速发展,人们之间的联络和交流变得比以往更为便捷。除了传统的电子邮件和即时通讯工具外,XMPP协议成为了一个

备受关注的通信协议,引领着互联网上的信息交流新时代。

一、XMPP的由来与特点

1. 由来:XMPP(Extensible Messaging and Presence Protocol,可扩

展消息与状态协议)最早是在Jabber项目中开发而成。2004年,该协

议正式获得IETF(互联网工程任务组)的标准化认可,并且逐渐被广

大开发者接受和应用。

2. 特点:XMPP是一种开放式、分布式的协议。它使用可扩展的XML进行数据交换,具备灵活性和可定制性。XMPP不仅支持文本消

息的传递,还能处理多媒体数据和文件传输。同时,XMPP的即时通

讯功能具备实时性和高度可靠性。

二、XMPP的应用领域

1. 即时通讯:XMPP最广为人知的应用领域就是即时通讯。像著名

的开源即时通讯软件Pidgin、Adium、Psi等,以及Facebook Messenger、Google Hangouts等大型社交平台都使用了XMPP协议。XMPP的分布

式设计使得即时通讯更具可扩展性和稳定性。

2. 物联网:随着物联网的不断发展,各种设备间的通信需求日益增长。XMPP作为一种轻量级的通信协议,为物联网提供了一个高效和

安全的通信方案。通过XMPP,智能家居设备、传感器、无人机等可

以实现实时数据的传输和远程控制,为物联网的发展提供了技术支持。

三、XMPP的优势与挑战

1. 优势:XMPP协议的开放性为开发者提供了更多的自由度和定制

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这种结构,最常用来标识一个即时消息用户,这个用户所连接的服务器,以及这个用户用于连接对资源。一个JID的每一个合法部分的长度不能超过1023字节,也就是整体长度(包括@和/)不能超过3071.

xmpp 协议

xmpp 协议

xmpp 协议

XMPP(Extensible Messaging and Presence Protocol)是一种开

放式的实时通信协议,用于消息传递和在线状态共享。它是一个基于XML的协议,能够实现跨平台和跨网络的通信。

XMPP的设计目标是提供一种分布式、松散耦合的系统,可以在不同的软件和服务之间交换信息。它的核心功能是实时消息传递和在线状态共享,但它也提供了几个扩展功能,例如文件传输、在线游戏、语音和视频通话等。

XMPP采用了一种分布式的体系结构,其中包括一个中央服务器和多个客户端。客户端可以是桌面应用程序、移动应用程序或者Web应用程序。其中一个最重要的特性是可扩展性,用

户可以根据自己的需求添加额外的功能和扩展。

在XMPP中,用户通过注册一个JID(Jabber ID)来加入网络。JID由用户名和域名组成,类似于电子邮件地址。用户之间可

以通过JID来发送消息,并且可以通过JID来查看用户的在线

状态。

XMPP协议使用基于XML的消息格式来传输数据。消息可以

是纯文本,也可以包含附加的元数据和命令。这种灵活性使得XMPP协议可以适应不同的应用场景。

XMPP还提供了一套通用的扩展机制,允许用户添加额外的功能。这些扩展可以通过描述XML命名空间和XML元素来实现。许多常见的扩展已经被定义,例如文件传输、语音和视频

通话等等。

XMPP在实时通信领域有广泛的应用。它被用于构建即时通讯应用程序,如Google Talk和Facebook Messenger。它还被用于构建社交网络和在线游戏服务。

网络协议知识:XMPP协议和MQTT协议的比较

网络协议知识:XMPP协议和MQTT协议的比较

网络协议知识:XMPP协议和MQTT协议的比

随着物联网技术的不断发展,越来越多的设备和系统需要进行实

时通信和消息传输。XMPP协议和MQTT协议是两种常用的网络通信协议,本文将对这两种协议进行比较,探讨它们的优缺点和适用场景。

一、XMPP协议

XMPP(Extensible Messaging and Presence Protocol)被定义

为一种开放式的标准,用于实现即时通信(IM)和在线状态(Presence)功能。XMPP最初被用于Jabber系统,现在已成为一种通用协议,越来越多的应用在使用XMPP协议进行通信。

XMPP协议的优点:

1、安全性高

XMPP协议支持TLS / SSL加密协议,可以保护数据传输的安全性。此外,XMPP还支持SASL授权协议,用户可以使用用户名和密码等凭据进行身份验证。

2、灵活性强

XMPP协议是一种灵活的协议,可以根据需要进行扩展和定制。这种灵活性使XMPP适合用于各种应用场景,从即时消息到实时位置更新等等。

3、消息传递速度快

XMPP协议传输消息使用的是XML格式,这种格式通常比其他格式更快更高效。因此,XMPP协议的消息传输速度相对较快。

XMPP协议的缺点:

1、性能不如其他协议

由于XMPP的XML格式较为复杂,因此其性能一般不如其他协议。这也限制了XMPP协议在某些性能要求较高的场景中的应用。

2、开发难度较大

由于XMPP协议的复杂性和灵活性,对于开发者而言,学习和掌握XMPP协议需要一定的时间和精力。这也会增加XMPP协议的开发难度。

二、MQTT协议

即时通讯方案

即时通讯方案

即时通讯方案

引言

即时通讯是指通过网络实时传递消息的技术,它在现代社交网络和企业通信中

扮演着重要的角色。本文将介绍几种常见的即时通讯方案,包括基于开源软件的方案和云服务方案。

开源软件方案

1. XMPP

XMPP(Extensible Messaging and Presence Protocol)是一种开源的即时通讯

协议,被广泛应用于聊天、实时协作和在线游戏等领域。XMPP协议基于XML,

具有良好的可扩展性和灵活性。

优点

•开源:XMPP是一个开放的标准,广泛应用于各种服务器和客户端实现。

•可扩展:XMPP支持自定义扩展,可以根据需求增加新功能。

•跨平台:XMPP可以在不同操作系统和设备上运行,包括Windows、Linux、iOS和Android等。

缺点

•复杂性:XMPP协议复杂度较高,实现和部署有一定的难度。

•性能:XMPP在大规模用户和高并发场景下性能可能受到限制。

•部署成本:自建XMPP服务器需要一定的硬件和网络资源。

2. Matrix

Matrix是一个去中心化的通讯协议和开放标准,类似于XMPP,但更注重去中

心化和用户隐私保护。Matrix基于HTTP和JSON等现有技术,可以实现跨平台、

跨网络的通讯。

优点

•去中心化:Matrix不依赖中央服务器,可以由多个服务器组成一个分布式网络。

•用户隐私保护:Matrix提供端到端加密和身份验证等安全机制,保护用户通讯内容和身份信息。

•跨平台:Matrix支持在不同操作系统和设备间进行通讯。

缺点

•发展相对较新:Matrix在市场上的应用和认可程度相对较低。

即时通讯协议

即时通讯协议

即时通讯协议

即时通讯协议是一种用于实时传输文本消息、音频和视频数据的通信协议。它

可以让用户之间通过网络进行实时的交流和沟通。即时通讯协议在现代社会中起到了重要的作用,让人们可以随时随地与亲朋好友、同事和商业伙伴保持联系。

1. 概述

即时通讯协议是一种基于网络的通信协议,用于实现即时消息传输。它的主要

特点是实时性和即时性。用户可以通过即时通讯软件或应用程序在任何时间、任何地点与其他用户进行交流。

2. 常见的即时通讯协议

2.1 XMPP

XMPP(Extensible Messaging and Presence Protocol)是一种开放式的即时通

讯协议。它基于XML(可扩展标记语言)格式,可以实现实时消息传输、在线状

态展示、文件传输等功能。XMPP协议具有灵活的扩展性,可以根据需求定制各种

功能。

2.2 SIP

SIP(Session Initiation Protocol)是一种用于建立、修改和终止会话的通信协议。它可以用于语音、视频和即时消息传输。SIP协议是一种灵活的通信协议,可

以与其他协议(如XMPP)结合使用,以实现更丰富的功能。

2.3 IRC

IRC(Internet Relay Chat)是一种基于文本的即时通讯协议。它最初用于互联

网上的实时聊天,但现在也广泛应用于团队协作和开源项目中。IRC协议具有简单、轻量级的特点,适合于低带宽环境下的通信。

2.4 WebSocket

WebSocket是一种在单个TCP连接上进行全双工通信的协议。它可以使客户

端和服务器之间实现实时的双向通信。WebSocket协议可以用于实现即时通讯功能,但它也可以用于其他领域,如实时游戏和推送服务。

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连接进行彼此间的通信。

XMPP

Client------------Server------------Server

网络协议知识:XMPP协议的特点和应用场景

网络协议知识:XMPP协议的特点和应用场景

网络协议知识:XMPP协议的特点和应用场景XMPP(Extensible Messaging and Presence Protocol)是一种

开放式、自由和可扩展的协议,也被称为Jabber协议。它是一个基于XML的协议,用于实现实时在线通信、即时消息、状态更新和其他信息的传输。XMPP协议的特点和应用场景是本文将要讲解的内容。

一、XMPP协议的特点

1.开放性

XMPP是一种开放式协议,任何人都可以获得相关文档和实现,可

以自由集成和使用于各种IM(Instant Messaging)软件和Web应用中。

2.跨平台

XMPP是跨平台的协议,可以在不同的操作系统、硬件和设备间进

行通信。因此,各种IM软件和Web应用可以通过XMPP进行实时交流

和消息传输。

3.可扩展性

XMPP协议是一种非常可扩展的协议,可以支持添加新的扩展功能模块,以满足不同的需求和实现更多的功能。

4.安全性

XMPP协议支持各种安全机制,包括TLS(Transport Layer Security)、SASL(Simple Authentication and Security Layer)等,能够提供安全的IM通信服务,防止信息泄露和攻击行为。

5.即时性

XMPP协议采用实时通信技术,消息的传输是实时的,能够保证IM 聊天的快速和高效。

二、XMPP协议的应用场景

1.即时通讯软件

XMPP协议是一种广泛应用于即时通讯软件中的协议,包括Google Hangouts、WhatsApp、Pidgin、Adium等,这些软件均采用XMPP协议来实现实时聊天、文件传输和群组通信等功能。

网络协议知识:XMPP协议和MQTT协议的应用场景和优缺点

网络协议知识:XMPP协议和MQTT协议的应用场景和优缺点

网络协议知识:XMPP协议和MQTT协议的应

用场景和优缺点

XMPP协议和MQTT协议是现代网络通信领域非常重要的两个协议。XMPP协议是一种基于XML的实时通信协议,而MQTT协议是一种轻量级的发布/订阅消息传递协议。这两个协议都可以在不同的应用场景中使用,但它们的使用优缺点也不相同。

XMPP协议的应用场景:

XMPP协议可以在各种实时通信场景中使用,例如即时通讯、社交网络、在线游戏和实时协同工作。XMPP协议还可以应用于语音和视频通话,以及远程桌面共享。由于XMPP协议基于XML,因此它可以很容易地扩展和自定义。同时,XMPP协议还具有很好的安全性和稳定性。

XMPP协议的优缺点:

优点:

1. XMPP协议具有很好的扩展性和自定义性,使其可以满足不同应用程序的特定需求。

2. XMPP协议的使用可以提高实时通信的效率,实现即时响应。

3. XMPP协议基于标准的XML语言,增加了与其他通讯协议的兼容性。

4. XMPP协议具有很好的安全性和稳定性。

缺点:

1. XMPP协议使用较为复杂,需要掌握较多的技术知识。

2. XMPP协议对服务器性能要求较高。

3. XMPP协议使用的是长连接,可能消耗过多的带宽和资源。

MQTT协议的应用场景:

MQTT协议主要应用于物联网、智能家居、远程监测和控制等场景中。MQTT协议中的发布/订阅模型使其成为物联网通信中的理想选择,许多物联网设备都可以使用MQTT协议进行通信。此外,MQTT协议还可以应用于移动应用程序,支持各种不同的平台和不同操作系统的设备。

MQTT协议的优缺点:

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协议本身并不具备数据加密和身份验证等安全机制,因此在

XMPP 协议工作流程

XMPP 协议工作流程

XMPP 协议工作流程详解

分类:翻译文章2014-04-23 11:11 2221人阅读评论(0) 收藏举报原文: .au/content/how-xmpp-works-step-step

作者: Yilun Fan, 日期2011-01-05 13:09

XMPP 核心协议/rfcs/rfc3920.html

XMPP 要点.

∙ 1. 客户端(C) 和服务器端(S) 通过TCP连接5222端口进行全双工通信.

∙ 2. XMPP 信息均包含在XML streams中.一个XMPP会话, 开始于 标签, 并结束于标签.所有其他的信息都位于这俩标签之间.

∙ 3. 出于安全目的考虑, 开始之后, 后续的内容会被适度的使用Transpor Layer Security (TLS) 协商传输和强制性的Simple Authentication 和Security

Layer (SASL) 协商传输.

∙ 4. SASL协商完成后, 一个新的stream 将会被迅速打开, 它将会更加安全和保密.第一步: 打开 stream

Client: 客户端发送打开stream 的片段到服务器, 请求一个新的session.

[html]view plaincopy

1.

这里“” 是客户端试图连接的服务器的域名.

Server: Server 返回XML stream, 以 开头, 包含要求TLS 或者

SASL 协商谈判之一, 或者2个都要求.

[html]view plaincopy

1.

2.

3.

4.

5.

6.DIGEST-MD5

ios xmpp工作原理

ios xmpp工作原理

ios xmpp工作原理

XMPP是一种开放的通信协议,旨在通过Internet实现实时、

分布式和协作式通信。它采用了客户端-服务器架构,其中客

户端使用XMPP协议与服务器进行通信。

XMPP的工作原理如下:

1. 建立连接:客户端使用TCP/IP协议与XMPP服务器建立连接。连接可以是传统的客户端-服务器连接,也可以是服务器-

服务器连接。

2. 身份验证:一旦连接建立,客户端必须使用用户名和密码等凭据进行身份验证,以便服务器可以识别和验证客户端的身份。

3. 建立会话:一旦身份验证成功,客户端会话被建立,并且可以与服务器进行交互。会话可以是持久的,以便客户端可以保持在线状态。

4. 联系人管理:客户端可以向服务器发送请求,以获取自己的联系人列表,并管理联系人的添加、删除和分组等操作。

5. 实时消息交换:使用XMPP协议,客户端可以向其他联系

人发送实时消息。消息通过服务器中转,以便在发送方和接收方之间进行可靠和实时的消息交换。

6. 出席状态管理:客户端可以告知服务器自己的出席状态,例如在线、离线、忙碌或隐身等。服务器可以使用这些信息来通知其他联系人有关当前的出席状态。

7. 扩展:XMPP允许通过扩展协议来添加额外的功能和特性。这些扩展可以用于文件传输、多人聊天、轻量级发布订阅等。8. 断开连接:当客户端不再需要与服务器通信时,可以发送断开连接请求以关闭与服务器的连接。

总结起来,XMPP通过建立连接、身份验证、建立会话、联系人管理、实时消息交换、状态管理等步骤实现即时通信功能。通过这种方式,用户可以实时与其他人进行文字、语音、视频等多种形式的通信。

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

在android里面用的smack包其实叫做asmack,该包提供了两种不同的连接方式:socket和httpclient。该并且提供了很多操作xmpp协议的API,也方便各种不同自定义协议的扩展。我们不需要自己重新去定义一套接收机制来扩展新的协议,只需继承然后在类里处理自己的协议就可以了。而本文今天主要说两点,一点就是消息是如何接收的,另一点就是消息是如何通知事件的。

总的思路

1.使用socket连接服务器

2.将XmlPullParser的数据源关联到socket的InputStream

3.启动线程不断循环处理消息

4.将接收到的消息解析xml处理封装好成一个Packet包

5.将包广播给所有注册事件监听的类

逐步击破

(声明在看下面的文章时,最好先理解一下smack的使用,这样才能达到深入的理解)

(谨记:上图只显示本文章解释所要用到的类和方法,减缩了一些跟本文主题无关的代码,只留一条贯穿着从建立连接到接收消息的线。)

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

1.

PacketListener packetListener = new PacketListener() {

@Override

public void processPacket(Packet packet) {

System.out

.println("Activity----processPacket"+ packet.toXML());

}

};

PacketFilter packetFilter = new PacketFilter() {

@Override

public 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 writers

connectUsingConfiguration(config);

}

5.

private void connectUsingConfiguration(ConnectionConfiguration

config) {

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 block

e1.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 block

e.printStackTrace();

} catch(IOException e) {

//TODO Auto-generated catch block

e.printStackTrace();

}

initDebugger();

}

private void initConnection() {

// Set the reader and writer instance variables

initReaderAndWriter();

相关文档
最新文档