xmpp

【XMPP】XMPP类型

狂风中的少年 提交于 2020-01-05 05:08:05
1、ConnectionConfiguration 作为用于与XMPP服务建立连接的配置。它能配置;连接是否使用TLS,SASL加密。 包含内嵌类:ConnectionConfiguration.SecurityMode 2、XMPPConnection XMPPConnection这个类用来连接XMPP服务. 可以使用connect()方法建立与服务器的连接。disconnect()方法断开与服务器的连接. 在创建连接前可以使用XMPPConnection.DEBUG_ENABLED = true; 使开发过程中可以弹出一个GUI窗口,用于显示我们的连接与发送Packet的信息。 3、ChatManager 用于监控当前所有chat。可以使用createChat(String userJID, MessageListener listener)创建一个聊天。 4、Chat Chat用于监控两个用户间的一系列message。使用addMessageListener(MessageListener listener)当有任何消息到达时将会触发listener的processMessage(Chat chat, Message message) 方法. 我们可以使用sendMessage()发送消息,这个方法有两个重载方法,一种类类型的参数时String类型

XMPP节之message,presence,IQ介绍

 ̄綄美尐妖づ 提交于 2020-01-05 05:07:40
XMPP节 核心XMPP工具集由三个基本节组成,分别为 、和 XMPP流由两份XML文档组成,通信的每个方向均有一个文档,这些文档有一个根元素,的子元素由可路由的节以及与流相关的顶级子元素构成。 <stream:stream> <iq type=’get’> <query xmlns=’jabber:iq:roster’ /> //请求自己的花名册 </iq> <presence/> //通知服务器她已在线并可以访问 <message to=’darcy@pemberley.lit’ from=’elizabaeth@longbourn.lit/ballroom’ type=’chat’> <body> I cannot talk of books in a ball-room; my head is always full of something else. </body> //发送消息 </message> <presence type=’unavailable’> // 声明自己不可访问并关闭 </stream:stream> 通用属性 from/to/type/id from的属性并非由客户端提供,而是服务端进行的标记。 presence节 presence提供网络实体的可访问性。用户发出presence节,表明自己上线,这样可以会有更大的概率与别人通信

xmpp协议学习笔记

扶醉桌前 提交于 2020-01-05 05:07:07
本文是根据 xmpp协议视频教程 的学习笔记。 每一个客户端使用JID(jabber identifier)来作为身份标识 ,格式为[user"@"]domain["/"resource],其中 domain:服务器域名; user:用户名; resource:属于用户的位置或设备,比如是手机还是电脑 一个用户可以同时以多种资源与统一个XMPP服务器连接,完整的JID例子:zhangsan@gmail.com/iphone6s stanza的通用属性:from,to,type,id(from属性与to属性遵循JID的格式) from:标识消息的发送方,但是考虑到会出现伪造客户端消息来源,服务器一般不会直接采用from的数据来确认数据是由谁发的,而是更具连接状态做校验。 to:指定消息的所要发送的对象,如果没有给出to属性,则服务器认为该消息是发送给自己的,而不会转发给其他的用户。 type:指定一段stanza的类型 id:stanza的唯一性标识,当客户端向服务端发送消息后,服务端向客户端做出响应,此处的id用于表示服务端是否是针对之前给此服务端发送消息的客户端的做唯一性标识。客服端在给服务端发消息的时候会在消息中加上该id。服务端在向客户端回复消息的时候回在消息中加上同样的id。 stream标签 client通过向server发送下面一段stanza来请求建立连接

xmpp学习笔记(一)

人走茶凉 提交于 2020-01-05 05:06:27
自己学习xmpp官方文档,慢慢整理的笔记,不见得都是正确的,请用选择性眼光看待,也有问题尚未解决,持续更新中~~~ 创建新工程,命名为XMPPIOS. 一:导入XMPPFramework 将XMPP拖拽到工程中。 添加静态库 并在Build Settings中设置如下 此时Run一下,成功,证明导入正确。 注意:XMPP使用了ARC, Edit -> Refactor -> convert to Objective-C ARC ,转换。 头文件也可以自己创建,内容是需要import的头文件,可以根据自己的需求来确定。 ------------------------------------------------可爱的分界线------------------------------------------------------------------ 二 :连接和注册 XEP-0077 XEP-0020 拖拽相应控件到页面中。 在appdelegate.h中创建相应属性 .m 这里创建xmpp的地方比官方的demo少了很多,主要是因为开始使用的时候个人认为并不用那么多变量,之后会一点一点添加。 添加 创建连接方法 创建连接成功后,两个代理方法调用,分别为 - ( void )xmppStreamWillConnect:( XMPPStream *)sender - ( void

XMPP即时通信(基础)

谁说我不能喝 提交于 2020-01-05 05:05:55
使用第三方框架 XMPPFramework #import "ViewController.h" #import "XMPPFramework.h" @interface ViewController ()<XMPPStreamDelegate>{ XMPPStream *_stream; XMPPRoster *_roster; } @end /* 二、如何集成XMPP协议框架 1. xmpp框架使用ARC 2. 依赖的框架: 1> libxml.dylib header search Path: /usr/include/libxml2 2> libresolv.dylib 三、开源的XMPP服务器端程序 1. openfire */ @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //管理xmpp链接的类 _stream = [[XMPPStream alloc]init]; [_stream setHostName:服务器];//服务器域名 [_stream setHostPort:5222];//可以不设置,默认5222 [_stream addDelegate:self delegateQueue:dispatch_get_main_queue()]; //重连

XMPP协议

断了今生、忘了曾经 提交于 2020-01-05 05:03:02
XMPP (Extensible Messageing and Presence Protocol) 可扩展消息与存在协议, 是目前主流的四种IM(即时消息)协议之一,其它三种分别为:即时信息和空间协议( IMPP )、空间和即时信息协议(PRIM)、针对即时通讯和空间平衡扩充的进程开始协议 SIP (SIMPLE)。 在这四种协议中,XMPP是最灵活的。 XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。 1、什么是XMPP ? XMPP的前身是 Jabber ,一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF国际标准组织完成了标准化工作。标准化的核心结果分为两部分: (1)核心的XML流传输协议 (2) 基于XML流传输的即时通讯扩展应用 XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上,借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。

XMPP协议

瘦欲@ 提交于 2020-01-05 05:02:37
XMPP (Extensible Messageing and Presence Protocol) 可扩展消息与存在协议, 是目前主流的四种IM(即时消息)协议之一,其它三种分别为:即时信息和空间协议( IMPP )、空间和即时信息协议(PRIM)、针对即时通讯和空间平衡扩充的进程开始协议 SIP (SIMPLE)。 在这四种协议中,XMPP是最灵活的。 XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址的服务等应用程序。而且,XMPP包含了针对服务器端的软件协议,使之能与另一个进行通话,这使得开发者更容易建立客户应用程序或给一个配好系统添加功能。 1、什么是XMPP ? XMPP的前身是 Jabber ,一个开源形式组织产生的网络即时通信协议。XMPP目前被IETF国际标准组织完成了标准化工作。标准化的核心结果分为两部分: (1)核心的XML流传输协议 (2) 基于XML流传输的即时通讯扩展应用 XMPP的核心XML流传输协议的定义使得XMPP能够在一个比以往网络通信协议更规范的平台上,借助于XML易于解析和阅读的特性,使得XMPP的协议能够非常漂亮。

XMPP协议分析-原理篇

余生颓废 提交于 2020-01-05 05:02:16
XMPP 协议简介 XMPP协议(Extensible Messaging and PresenceProtocol,可扩展消息处理现场协议)是一种基于XML的协议,目的是为了解决及时通信标准而提出来的,最早是在Jabber上实现的。它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。并且XML很易穿过防火墙,所以用XMPP构建的应用不易受到防火墙的阻碍。利用XMPP作为通用的传输机制,不同组织内的不同应用都可以进行有效的通信。 XMPP 协议特点 1)所有XMPP信息都是以XML为基础的,信息交换的事实标准,扩展性强 2)XMPP系统是一个分布式系统,每台服务器控制自己的资源,但是如果需要,它能与外在的系统进行通信。XMPP服务器利用开放的XML协议来进行S2S(Serverto Server)通信,就像在C2S(Client to Server)一样。相比之下,大多数的IM系统使用了只是支持C2S/S2C通信的协议,因此Jabber/XMPP服务器具有更大的灵活性。 3)XMPP协议是公开的,程序则开放源代码。定义了客户端和服务器端的交互要经由XML流。普通消息类型(message),如改变状态(presence),传递消息内容或查询/更新(info/quey)应用则用每个指定的命名空间(namespace)来建立。 4)状态(Presence

XMPP协议分析—具体篇

我的未来我决定 提交于 2020-01-05 05:01:33
通过WireShark抓包来具体分析XMPP协议,下面用人人桌面版演示了,XMPP客户端从登录到获取新鲜事的过程,通过分析具体的数据包能够更容易的理解协议。 Step1.TCP 三次握手建立连接 图1.xmpp客户端使用5222端口,设置SYN请求连接 图2.服务器返回ACK,确认请求,同样设置SYN请求连接 图3.客户端确认服务器连接请求,连接建立完毕。 Step2. 客户端请求,服务器响应。 图4.客户端发送Jabber/x Request请求, 客户端初始化流给服务器 图5.服务器返回Jabber/x Response,服务器发送一个流标签给客户端作为应答 图5.5服务器发送 STARTTLS 范围给客户端(包括验证机制和任何其他流特性) 图6.客户端发送请求,发送,请求使用传输层加密协议[TLS] 图7.服务器端响应,返回元素,确认传输加密 图8.之后的请求,数据均已经加密 图9.之后的响应,返回数据也是加密的 来源: https://www.cnblogs.com/zhengrunqiang/p/3476876.html

Is it possible JIDs with only different resources joining same multi-user chat room

爱⌒轻易说出口 提交于 2020-01-05 04:25:12
问题 In xmpp, following 2 users could join multi-user chat(MUC) or subscribe to same pub-sub node? public@service.com/user1 public@service.com/user2 回答1: When joining an anonymous MUC room, a room where others do not know the "real" JID of others in the room, the connecting user provides their own JID. When joining a non-anonymous room the users provide their full JID which is transmitted then to all occupants. In either case there is nothing to prevent the user from joining with the same bare JID