XMPP

XMPP: 是一個(gè)即時(shí)通訊的傳輸協(xié)議,傳輸?shù)臄?shù)據(jù)都是 XML 格式.
對(duì)于XMPP框架的分析:
運(yùn)行他給我們的實(shí)例程序可知,他直接輸入JID和密碼就可以登入,原來(lái)他是把我們?cè)谖谋究蛑休斎氲男畔⑾缺4嬖谏澈?然后從沙盒中讀取之后傳給服務(wù)器,值得注意的是,他在登錄到服務(wù)器的時(shí)候,并沒(méi)有同時(shí)把賬號(hào)和密碼發(fā)送給服務(wù)器,當(dāng)賬號(hào)對(duì)了的時(shí)候,進(jìn)行連接,連接成功后才發(fā)送密碼.

對(duì)于GCDAsyncSocket:
!!!他是將輸入,輸出流封裝了,不用繁瑣的使用C語(yǔ)言

  //創(chuàng)建clientSocket對(duì)象
    self.clientSocket = [[GCDAsyncSocket alloc]initWithDelegate:self delegateQueue:dispatch_get_main_queue()];
    //連接主機(jī)(IP地址+端口)
    uint16_t port = 8888;
    NSError *error = nil;
  //連接
    if(![self.clientSocket connectToHost:self.ipTextField.text onPort:port error:&error]){
        //返回是否連接成功
        NSLog(@"客戶端連接服務(wù)器端失敗:%@",error.userInfo);
    }else{
        NSLog(@"正在連接......");
    }

AsyncSocket 代理

//監(jiān)聽(tīng)和服務(wù)器的連接成功(socket洞打通)
-(void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(uint16_t)port{
    NSLog(@"連接成功,可以發(fā)送消息");
 
}
//監(jiān)聽(tīng)是否發(fā)送成功
-(void)socket:(GCDAsyncSocket *)sock didWriteDataWithTag:(long)tag{
    NSLog(@"客戶端發(fā)送成功");

  //數(shù)據(jù)發(fā)送成功后,自己調(diào)用一下讀取數(shù)據(jù)的方法,接著_socket才會(huì)調(diào)用下面的代理方法
    [self.clientSocket  readDataWithTimeout:-1 tag:tag];
}
//監(jiān)聽(tīng)有服務(wù)器端發(fā)送來(lái)的消息
-(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];
   
}

實(shí)現(xiàn)登錄:

   //登錄的指令
    NSString *loginStr = @"iam:zhangsan";
    
    //把Str轉(zhuǎn)成NSData
    NSData *data = [loginStr dataUsingEncoding:NSUTF8StringEncoding];

    // 發(fā)送登錄指令給服務(wù)
    [self.clientSocket  writeData:data withTimeout:-1 tag:101];

XMPP核心文件
XMPPStream:是開(kāi)發(fā)過(guò)程中最主要交互的類,所有擴(kuò)展和自定義代碼均要基于此類進(jìn)行
XMPPParser:供XMPPStream解析使用
XMPPJID:提供了一個(gè)不可變JID的實(shí)現(xiàn),遵守NSCopying協(xié)議和NSCoding協(xié)議
XMPPElement:以下三個(gè)XMPP元素的基類
XMPPIQ :請(qǐng)求(加好友)
XMPPMessage :消息
XMPPPresence :出席(標(biāo)示用戶的在線狀態(tài))
XMPPModule:開(kāi)發(fā)XMPP擴(kuò)展時(shí)使用
XMPPLogging:XMPP的日志框架
XMPPInternal:整個(gè)XMPP框架內(nèi)部使用的核心和高級(jí)底層內(nèi)容

XMPP實(shí)現(xiàn)登錄
XMPPFrame框架是通過(guò)代理的方式實(shí)現(xiàn)消息傳遞的

實(shí)現(xiàn)用戶登錄的步驟如下:

  1. 實(shí)例化XMPPStream并設(shè)置代理,同時(shí)添加代理到工作隊(duì)列
  2. 使用JID連接至服務(wù)器,默認(rèn)端口為5222,JID字符串中需要包含服務(wù)器的域名
  3. 在完成連接的代理方法中驗(yàn)證用戶密碼,連接完成后XMPPStream的isConnect屬性為YES
  4. 在驗(yàn)證代理方法中判斷用戶是否登錄成功
  5. 上線或者下線成功后,向服務(wù)器發(fā)送Presence數(shù)據(jù),以更新用戶在服務(wù)器的狀態(tài)

XMPP電子名片的使用
1.需要在XMPPFramework.h中啟用電子名片的擴(kuò)展頭文件:

import "XMPPvCardCoreDataStorage.h"

import"XMPPvCardTempModule.h"

// 實(shí)例化電子名片模塊
xmppvCardStorage= [XMPPvCardCoreDataStoragesharedInstance];
_xmppvCardModule= [[XMPPvCardTempModulealloc] initWithvCardStorage:_xmppvCardStorage];

// 激活電子名片模塊
[_xmppvCardModuleactivate:_xmppStream];

XMPP花名冊(cè)的使用

  1. 要使用花名冊(cè)首先需要在XMPPFramework.h中啟用電子名片的擴(kuò)展頭文件:

import "XMPPRoster.h"

import "XMPPRosterCoreDataStorage.h"

  1. 定義屬性及成員變量
  2. 為XMPPSteam添加花名冊(cè)擴(kuò)展
  3. 設(shè)置花名冊(cè)代理
  4. 在需要時(shí)使用花名冊(cè)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本篇文章是整理以前在CSDN上所發(fā)表的文章,更新文章內(nèi)容,更詳細(xì)地描述操作,以方便大家閱讀和理解。 本篇文章的內(nèi)容...
    隨風(fēng)飄蕩的小逗逼閱讀 553評(píng)論 0 0
  • iOS 的 XMPP framework 簡(jiǎn)介 登陸 - 驗(yàn)證密碼上線 - 斷開(kāi) - 好友狀態(tài) - 接收消息和發(fā)送...
    錢(qián)噓噓閱讀 2,385評(píng)論 0 18
  • 關(guān)于XMPP最權(quán)威的講解:http://www.jabbercn.org/RFC3920(這個(gè)才是最權(quán)威的,下面文...
    隨風(fēng)飄蕩的小逗逼閱讀 1,647評(píng)論 1 5
  • 一、導(dǎo)入XMPP框架 下載 XMPPFramework 框架GitHub: XMPPFramework 導(dǎo)入依賴框...
    伯恩的遺產(chǎn)閱讀 16,359評(píng)論 17 134
  • 春雨悠憂一縷愁, 櫻花滿蔓幾時(shí)羞。 醉月亭里無(wú)醉月, 白龜水庫(kù)寫(xiě)翠柳。 ----趙世杰·《春憂》
    一2三4五6閱讀 211評(píng)論 0 1

友情鏈接更多精彩內(nèi)容