美文网首页
XMPP使用

XMPP使用

作者: 豆浆油条cc | 来源:发表于2016-05-05 14:14 被阅读270次

    网上有很多XMPP的介绍 在这里我总结一下
    即时通讯 : 核心在与通讯协议的不同 每个IM系统最大的区别在于通讯协议的不同

    XMPP : 前身是Jabber 主要用于公司内部的通讯
    基于XML 开放的 可扩展的通讯协议 典型的C/S架构
    是分散型的通讯网络 : 基于XMPP协议 不同服务器之间的用户可以进行通讯
    代表作是 : GTalk
    Talk : 是googleIM工具 基于Jabber 可以与不同的即时通讯系统相连接
    2013年 Google使用Hangouts(环聊)取代GTalk

    工作原理 :
    1.节点连接到服务器
    2.服务器利用本地目录系统中的证书对其认证
    3.节点指定目标地址,让服务器告知目标状态
    4.服务器查找、连接并进行相互认证
    5.节点之间进行交互

    使用XMPP进行登录和下线 用cocopoads下载框架XMPPFramework

    p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #ff4647}p.p2 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #08fa95}p.p3 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #ffffff; min-height: 16.0px}p.p4 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #4bd157}p.p5 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px 'PingFang SC'; color: #4bd157}p.p6 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #de38a6}p.p7 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #ffffff}p.p8 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #eb905a}p.p9 {margin: 0.0px 0.0px 0.0px 0.0px; font: 14.0px Menlo; color: #4bd157; min-height: 16.0px}span.s1 {font-variant-ligatures: no-common-ligatures; color: #eb905a}span.s2 {font-variant-ligatures: no-common-ligatures}span.s3 {font-variant-ligatures: no-common-ligatures; color: #de38a6}span.s4 {font-variant-ligatures: no-common-ligatures; color: #ffffff}span.s5 {font: 14.0px 'PingFang SC'; font-variant-ligatures: no-common-ligatures}span.s6 {font: 14.0px Menlo; font-variant-ligatures: no-common-ligatures}span.s7 {font-variant-ligatures: no-common-ligatures; color: #08fa95}span.s8 {font: 14.0px Menlo; font-variant-ligatures: no-common-ligatures; color: #ffffff}span.s9 {font-variant-ligatures: no-common-ligatures; color: #00b1ff}span.s10 {font-variant-ligatures: no-common-ligatures; color: #ff4647}span.s11 {font: 14.0px 'PingFang SC'; font-variant-ligatures: no-common-ligatures; color: #ff4647}span.s12 {font-variant-ligatures: no-common-ligatures; color: #4bd157}span.s13 {font: 14.0px 'PingFang SC'; font-variant-ligatures: no-common-ligatures; color: #4bd157}span.s14 {font-variant-ligatures: no-common-ligatures; color: #8b87ff}
    
    #import "AppDelegate.h"
    #import <XMPPFramework.h>
    @interface AppDelegate ()<XMPPStreamDelegate>
    
    /** 通过XMPPStream类!!!!  和服务器进行数据的传输  */
    /**
     针对不同的传输内容,会调用不同的代理方法,在使用XMPPFramework开发时,只需要在不同的代理方法中,填写相应的代码即可。
     */
    @property(nonatomic,strong)XMPPStream* xmppStream;
    
    /** 和服务器连接 */
    -(void)connect;
    /** 和服务器断开连接 */
    -(void)disconnect;
    /** 上线 */
    -(void)shangxian;
    /** 下线 */
    -(void)xiaxian;
    @end
    
    @implementation AppDelegate
    
    #pragma mark - 账户的上线和下线
    /** 上线 */
    -(void)shangxian{
        //发送上线消息给服务器--获取状态节点
        //XMPPPresence继承自XMPPElement
        XMPPPresence* presence=[XMPPPresence presence];
        //把节点发送给服务器
        [self.xmppStream sendElement:presence];
        NSLog(@"上线");
    }
    /** 下线 */
    -(void)xiaxian{
        //获取节点
        XMPPPresence* presence=[XMPPPresence presenceWithType:@"available"];
        //发送节点给服务器
        [self.xmppStream sendElement:presence];
        NSLog(@"下线");
    }
    #pragma mark -XMPPStream的代理方法
    /** 连接服务器 */
    -(void)xmppStreamDidConnect:(XMPPStream *)sender{
        NSLog(@"已经和服务器进行连接");
        //由XMPPStream把密码发送给服务器  确认用户能够使用 “长连接"
        [self.xmppStream authenticateWithPassword:@"5435695" error:NULL];
    }
    /** 断开服务器 */
    -(void)xmppStreamWasToldToDisconnect:(XMPPStream *)sender{
        NSLog(@"和服务器断开");
        //需要下线....
        [self xiaxian];
    }
    
    //服务器授权成功
    -(void)xmppStreamDidAuthenticate:(XMPPStream *)sender{
        //上线
        [self shangxian];
    }
    //服务器授权失败
    -(void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(DDXMLElement *)error{
        NSLog(@"密码不正确");
    }
    #pragma mark - 实例化XMPPStream
    -(XMPPStream *)xmppStream{
        if (_xmppStream==nil) {
            _xmppStream=[[XMPPStream alloc]init];
            
            //设置代理 通过代理监听数据的传输
            //dispatch_queue_create(0, 0) 不能放在主队列 因为数据交互过程是耗时的 在主线程上回卡住
            [_xmppStream addDelegate:self delegateQueue:dispatch_queue_create(0, 0)];
            
        }
        return _xmppStream;
    }
    #pragma mark - 注销激活状态
    //长连接是耗资源的 需要在注销的时候 和服务器断开
    - (void)applicationWillResignActive:(UIApplication *)application {
        [self disconnect];
    }
    #pragma mark - 变成激活状态
    - (void)applicationDidBecomeActive:(UIApplication *)application {
        [self connect];
    }
    /** 和服务器进行连接 */
    -(void)connect{
         /** 设置服务器的名称 现在和本地域名一样 */
        NSString* hostName=@"macdemacbook-air.local";
        /** JID : 通过JID可以区分 所有用户 服务器 聊天室  */
        /** 一个JID对应整个即时通讯的一个节点  */
        /**从用户角度讲  JID =账户名+@+主机名*/
        XMPPJID* myJID=[XMPPJID jidWithString:@"cc@macdemacbook-air.local"];
        
        //赋值
        self.xmppStream.hostName=hostName;
        self.xmppStream.myJID=myJID;
        
        /**
         * 使用指定的主机名hostName和端口号连接到服务器
         * 超时时长是可选的,如果不关心,可以使用XMPPStreamTimeoutNone
         * 如果hostName(主机名)或者myJID没有设置,此方法返回NO,并且设置错误信息
         
         问题:如何知道连接的结果呢?连接的动作,本质上是“告诉服务器我来了”!
         **/
        [self.xmppStream connectWithTimeout:XMPPStreamTimeoutNone error:NULL];
        
    }
    /** 断开和服务器的连接 */
    -(void)disconnect{
        [self.xmppStream disconnect];
    }
    

    代码完成后 可以进行用户的登录和下线 可以安装mysql数据库 /openfile服务器 来看是否登录成功

    相关文章

      网友评论

          本文标题:XMPP使用

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