XMPP: 是一个即时通讯的传输协议,传输的数据都是 XML 格式.
对于XMPP框架的分析:
运行他给我们的实例程序可知,他直接输入JID和密码就可以登入,原来他是把我们在文本框中输入的信息先保存在沙盒,然后从沙盒中读取之后传给服务器,值得注意的是,他在登录到服务器的时候,并没有同时把账号和密码发送给服务器,当账号对了的时候,进行连接,连接成功后才发送密码.
对于GCDAsyncSocket:
!!!他是将输入,输出流封装了,不用繁琐的使用C语言
//创建clientSocket对象
self.clientSocket = [[GCDAsyncSocket alloc]initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
//连接主机(IP地址+端口)
uint16_t port = 8888;
NSError *error = nil;
//连接
if(![self.clientSocket connectToHost:self.ipTextField.text onPort:port error:&error]){
//返回是否连接成功
NSLog(@"客户端连接服务器端失败:%@",error.userInfo);
}else{
NSLog(@"正在连接......");
}
AsyncSocket 代理
//监听和服务器的连接成功(socket洞打通)
-(void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port{
NSLog(@"连接成功,可以发送消息");
}
//监听是否发送成功
-(void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag{
NSLog(@"客户端发送成功");
//数据发送成功后,自己调用一下读取数据的方法,接着_socket才会调用下面的代理方法
[self.clientSocket readDataWithTimeout:-1 tag:tag];
}
//监听有服务器端发送来的消息
-(void)socket:(GCDAsyncSocket *)sock didReadData:(NSData *)data withTag:(long)tag{
//把data显示到UITextView上
NSString *messageStr = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
self.showMessageTextView.text = [NSString stringWithFormat:@"%@%@\n",self.showMessageTextView.text, messageStr];
}
实现登录:
//登录的指令
NSString *loginStr = @"iam:zhangsan";
//把Str转成NSData
NSData *data = [loginStr dataUsingEncoding:NSUTF8StringEncoding];
// 发送登录指令给服务
[self.clientSocket writeData:data withTimeout:-1 tag:101];
XMPP核心文件
XMPPStream:是开发过程中最主要交互的类,所有扩展和自定义代码均要基于此类进行
XMPPParser:供XMPPStream解析使用
XMPPJID:提供了一个不可变JID的实现,遵守NSCopying协议和NSCoding协议
XMPPElement:以下三个XMPP元素的基类
XMPPIQ :请求(加好友)
XMPPMessage :消息
XMPPPresence :出席(标示用户的在线状态)
XMPPModule:开发XMPP扩展时使用
XMPPLogging:XMPP的日志框架
XMPPInternal:整个XMPP框架内部使用的核心和高级底层内容
XMPP实现登录
XMPPFrame框架是通过代理的方式实现消息传递的
实现用户登录的步骤如下:
- 实例化XMPPStream并设置代理,同时添加代理到工作队列
- 使用JID连接至服务器,默认端口为5222,JID字符串中需要包含服务器的域名
- 在完成连接的代理方法中验证用户密码,连接完成后XMPPStream的isConnect属性为YES
- 在验证代理方法中判断用户是否登录成功
- 上线或者下线成功后,向服务器发送Presence数据,以更新用户在服务器的状态
XMPP电子名片的使用
1.需要在XMPPFramework.h中启用电子名片的扩展头文件:
import "XMPPvCardCoreDataStorage.h"
import"XMPPvCardTempModule.h"
// 实例化电子名片模块
xmppvCardStorage= [XMPPvCardCoreDataStoragesharedInstance];
_xmppvCardModule= [[XMPPvCardTempModulealloc] initWithvCardStorage:_xmppvCardStorage];
// 激活电子名片模块
[_xmppvCardModuleactivate:_xmppStream];
XMPP花名册的使用
- 要使用花名册首先需要在XMPPFramework.h中启用电子名片的扩展头文件:
import "XMPPRoster.h"
import "XMPPRosterCoreDataStorage.h"
- 定义属性及成员变量
- 为XMPPSteam添加花名册扩展
- 设置花名册代理
- 在需要时使用花名册