XMPP协议即时通讯(Openfire服务器版)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
XMPP协议即时通讯(Openfire服务器版)
一、什么是XMPP
XMPP(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的状态是停止的。点击Start
Openfire,开启Openfire服务器
注:如果Openfire一直打不开,请参考:
/winer888/article/details/49886281
当Status成为Running。点击右边的Open Adimin Console。会进入Openfire 的配置界面
选择中文,下一步
服务器设置,如果是本机,域中填写127.0.0.1,其余的不用修改。下一步
选择标准数据库连接。下一步
这个地方需要我们链接一个数据库,在数据库驱动选项中选择MySQL。
点击Start All,然后当上面的MySQL Database、ProFTPD、Apache Web Server 都变为绿色的Running就说明这些服务都已经开启了
进入XAMPP界面。选择左边的PHPMyAdmin
新建一个数据库,并给数据库起一个名字
在前往文件夹中输入/usr/local
找到openfire文件夹,此时的Openfire文件夹是只读的。
右键显示简介,将共享和权限改成读与写
在openfire/resources/database/openfire_mysql.sql找到数据库格式文件。将这个文件复制到桌面
然后进入到XAMPP界面。导入数据库格式
然后我们继续配置Openfire,修改数据库URL和用户名密码。
数据库URL,将[host-name]换成127.0.0.1。[database-name]换成数据库的名字。用户名默认root,密码无,点击继续
特性设置选择初始设置,点击继续。
管理员账户,填写你的邮箱和密码(一定要记住哦)。点击继续,就配置好了Openfire服务器。
点击登录到管理控制台,输入用户名(admin)和密码。这样就进入了Openfire 的后台管理控制平台。
三、安装和使用Spark客户端
Spark是一个实时通讯客户端。我们可以通过Spark来进行即时通讯。
安装好Spark后,登录Spark
登录成功后,进入Openfire后台管理界面,刷新页面,admin会变为绿色的,即上线状态(灰色为未上线状态)
通过登录admin账号,也就可以说明,Openfire的服务器配置是成功的。
四、代码实现客户端
服务器用Openfire实现了,下面我们用代码创建即时通讯客户端
1、前期准备
新建一个工程,导入XMPP框架到工程,进入XMPP框架下XMPPConfig.h
文件中,将服务器IP地址,端口号、域名、resource做一下修改。
注意:由于我们的服务器是本地的,所以填写127.0.0.1,域名要和Openfire 填写域名一致。
然后导入一些框架
CoreData.framework、libxml2.tbd、libresolv.tbd、libidn.a
修改一下Header Search Path
添加一个PCH文件,命名为PrefixHeader.pch,修改一下路径
注意.pch在工程中的路径
然后在PCH文件中添加#import头文件
command+b一下,会有一个红色报错,点击红色报错,由于重名,所以进所以将SCNetworkReachabilityFlags改成SCNetworkReachabilityFlags1,command+b 后没有报错。
2、创建一个管理类,便于我们去将代码分类管理
创建一个XMPPManager单例类,继承于NSObject。这个类是这个工程中的核心功能代码。
首先要在XMPPManager中创建一个通信通道属性,即XMPPStream。这个实例是传输数据的,只有通信通道是连通的那么才可以进行数据的传输,XMPPStream也是XMPP的核心类。
在XMPPManager.m中的init方法中,进行初始化XMPPStream,并指定服务器IP、端口和设置代理