XMPP

作者: 逸小枫 | 来源:发表于2016-08-23 09:54 被阅读22次

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框架是通过代理的方式实现消息传递的

实现用户登录的步骤如下:

  1. 实例化XMPPStream并设置代理,同时添加代理到工作队列
  2. 使用JID连接至服务器,默认端口为5222,JID字符串中需要包含服务器的域名
  3. 在完成连接的代理方法中验证用户密码,连接完成后XMPPStream的isConnect属性为YES
  4. 在验证代理方法中判断用户是否登录成功
  5. 上线或者下线成功后,向服务器发送Presence数据,以更新用户在服务器的状态

XMPP电子名片的使用
1.需要在XMPPFramework.h中启用电子名片的扩展头文件:

import "XMPPvCardCoreDataStorage.h"

import"XMPPvCardTempModule.h"

// 实例化电子名片模块
xmppvCardStorage= [XMPPvCardCoreDataStoragesharedInstance];
_xmppvCardModule= [[XMPPvCardTempModulealloc] initWithvCardStorage:_xmppvCardStorage];

// 激活电子名片模块
[_xmppvCardModuleactivate:_xmppStream];

XMPP花名册的使用

  1. 要使用花名册首先需要在XMPPFramework.h中启用电子名片的扩展头文件:

import "XMPPRoster.h"

import "XMPPRosterCoreDataStorage.h"

  1. 定义属性及成员变量
  2. 为XMPPSteam添加花名册扩展
  3. 设置花名册代理
  4. 在需要时使用花名册

相关文章

网友评论

      本文标题:XMPP

      本文链接:https://www.haomeiwen.com/subject/oywgsttx.html