*  XMPP的特点,所有的请求都是通过代理的方式实现的
 *
 *  因为xmpp是经由网络服务器进行数据通讯的,因此所有的,因此所有的请求都是提交给服务器处理
 *
 *  服务器处理完毕止呕,以代理的方式告诉客户端处理结果
 *
 *  官方推荐AppDelegate处理所有来自XMPP服务器的代理响应

AppDelegate.h

//
//  AppDelegate.h
//  xmpp练习
//
//  Created by tqh on 15/4/12.
//  Copyright (c) 2015年 tqh. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "XMPPFramework.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate>@property (strong, nonatomic) UIWindow *window;#pragma mark - XMPP相关的属性和方法定义
/***  全局xmppstream,只读属性*/
@property (strong,nonatomic,readonly) XMPPStream *xmppStream;@end

AppDelegate.m

//
//  AppDelegate.m
//  xmpp练习
//
//  Created by tqh on 15/4/12.
//  Copyright (c) 2015年 tqh. All rights reserved.
//

#import "AppDelegate.h"//提示,此处不遵守XMPPStreamDlegate协议,程序仍然能够正常运行
@interface AppDelegate ()<XMPPStreamDelegate>
/***  设置xmppStream*/
- (void)setupStream;/***  通知服务器用户上线*/
- (void)goOneline;/***  通知服务器用户下线*/
- (void)goOffline;/***  链接服务器*/
- (void)connect;/***  与服务器断开连接*/- (void)disConnect;@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
//    [self connect];return YES;
}- (void)applicationWillResignActive:(UIApplication *)application {[self disConnect];
}- (void)applicationDidBecomeActive:(UIApplication *)application {[self connect];
}#pragma mark - XMPP相关方法#pragma mark - 设置XMPPStream- (void)setupStream {//避免被重复实例化if (_xmppStream == nil) {//1.实例化XMPPStream_xmppStream = [[XMPPStream alloc]init];//2.添加代理//因为所有网络请求都是做基于网络数据处理,跟UI界面无关,因此可以让代理方法在其它线程中运行//从而提高程序的运行性能[_xmppStream addDelegate:self delegateQueue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)];}}#pragma mark - 通知服务器用户上线- (void)goOneline {//1.实例化一个"展现",上线的报告XMPPPresence *presence = [XMPPPresence presence];//2.发送presence给服务器//服务器知道"我"上线后,只需要通知我的好友,而无需通知我,因此,次方法没有回调
    [_xmppStream sendElement:presence];}#pragma mark - 通知服务器用户下线- (void)goOffline {NSLog(@"用户下线");//1.实例化一个“展现”,下线报告XMPPPresence *presence = [XMPPPresence presenceWithType:@"unavailable"];//2.发送Presence给服务器,通知服务器客户端下线
    [_xmppStream sendElement:presence];
}#pragma mark - 连接- (void)connect {//1.设置XMPPStream
    [self setupStream];//2.设置用户名,密码,主机(服务器),连接时不需要passwordNSString *userName = @"tqhTest";NSString *hostName = @"127.0.0.1";//3.设置XMPPStream的JID和主机
//    [_xmppStream setMyJID:[XMPPJID jidWithString:userName]]; //@127.0.0.1[_xmppStream setMyJID:[XMPPJID jidWithUser:userName domain:@"127.0.0.1" resource:nil]];[_xmppStream setHostName:hostName];//4.开始链接NSError *error = nil;[_xmppStream connectWithTimeout:10 error:&error];//提示:如果没有制定JID和hostName,才会出错,其他都不会出错if (error) {NSLog(@"连接请求发送出错:%@",error.localizedDescription);}else {NSLog(@"连接请求发送成功");}
}#pragma mark - 断开连接- (void)disConnect {//1.通知服务器下线
    [self goOffline];//2.XMPPStream断开连接
    [_xmppStream disconnect];
}#pragma mark - 代理方法
#pragma mark - 连接完成(如果服务器地址不对,就不会调用此方法)
- (void)xmppStreamDidConnect:(XMPPStream *)sender {NSLog(@"连接建立");//开始发送身份验证请求NSError *error = nil;NSString *password = @"123456";[_xmppStream authenticateWithPassword:password error:&error];}#pragma mark - 身份验证通过- (void)xmppStreamDidAuthenticate:(XMPPStream *)sender {NSLog(@"身份验证通过");
}#pragma mark - 密码错误,身份验证失败- (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(DDXMLElement *)error {NSLog(@"身份验证失败%@",error);}
//<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><not-authorized></not-authorized></failure>
@end

转载于:https://www.cnblogs.com/hxwj/p/4420923.html

xmpp 与服务器连接并身份验证成功相关推荐

  1. VMware View Client 连接服务器,提示身份验证失败,连接服务器时

    第一次安装或则重装系统后安装VMware View的时候  点击下一步 然后连接服务器地址  例如:192.168.xx.xxx,点击连接后,在输入账号的时候弹出VMware View Client ...

  2. 服务器远程连接发生身份验证错误解决方案

    问题描述一:服务器远程连接发生身份验证错误,要求的函数不受支持解决方案 "计算机配置"->"管理模板"->"系统"->&q ...

  3. 远程桌面连接“发生身份验证错误。 无法连接到本地安全机构”解决方法

    2019独角兽企业重金招聘Python工程师标准>>> 症状 当试图建立远程桌面连接使用远程桌面服务器运行的是 Windows Server 2008 R2 为远程桌面客户端 (ms ...

  4. 快速解决:阿里云ECS实例远程桌面连接 发生身份验证错误。要求的函数不受支持 !

    三步解决问题: 本地PC 远程桌面连接 阿里云ECS实例 失败 ? 报错: "发生身份验证错误.要求的函数不受支持" ? 一.问题截图描述: 二.3步解决问题: 1. 网页版 · ...

  5. mysql客户端不支持_MySQL 8.0 - 客户端不支持服务器请求的身份验证协议; 考虑升级MySQL客户端...

    MySQL 8.0 - 客户端不支持服务器请求的身份验证协议; 考虑升级MySQL客户端 我是node.js和MySQL初学者,我刚开始设置并尝试一些基本代码.但是,由于某种原因,我甚至无法与服务器建 ...

  6. 阿里云Windows远程连接出现身份验证错误,要求的函数不正确”的报错。

    最近很多阿里云用户在远程Windows Server的云服务器ECS时出现"身份验证错误,要求的函数不受支持"的报错. 这个问题解决起来非常简单,修改组策略中的一个配置就可以了. ...

  7. 远程桌面连接出现身份验证错误。 要求的函数不受支持,这可能是由于 CredSSP 加密 Oracle 修正。...

    远程桌面连接出现身份验证错误. 要求的函数不受支持,这可能是由于 CredSSP 加密 Oracle 修正. 查看解决方案

  8. mstsc远程连接发生身份验证错误要求的函数不受支持的两种解决方法

    mstsc远程连接发生身份验证错误要求的函数不受支持解决方法 1:可以找到加密oracle修正 按下 windows + R,调出运行窗口,输入 gpedit.msc ,回车即可 打开"本地 ...

  9. WIN7远程桌面连接--发生身份验证错误。要求的函数不受支持

    1.WIN7远程桌面连接–"发生身份验证错误.要求的函数不受支持" 最近WIN7升级补丁后发现远程桌面无法连接了,报"发生身份验证错误.要求的函数不受支持"的错 ...

最新文章

  1. mysql切换到使用openssl_OpenSSL可以用来调试到MySQL服务器的SSL连接吗?
  2. 2015年第六届蓝桥杯 - 省赛 - C/C++大学B组 - C. 三羊献端
  3. 计算机表格中需要乘法求和,《怎么在Excel表格里面使用乘法求和》
  4. 企业如何提升数据质量
  5. LSTMs和递归神经网络的初学者指南
  6. Swift 新建 APP 黑屏问题
  7. TableView数据源方法的执行顺序
  8. 一年读完100本书(5/100)《创新者的窘境》2021-02-25
  9. 2.7 SLD参考标准与GeoServer扩展
  10. 超链接标签a实现跳转
  11. Android WiFi Direct文件传输
  12. 通向Golang的捷径【21. Go 语言的实际应用】
  13. JAVA系列:SimpleDateFormat解析带T字符的时间格式( yyyy-MM-ddTHH:mm:sssZ )
  14. matlab错误dparsfa,Dpabi安装出错,求助大大佬
  15. [学习笔记]《零基础做出高逼格PPT》
  16. 读Python源码(三)Python列表的表示
  17. win10邮件配置qq邮箱和outlook邮箱
  18. 小米笔记本Air 13.3(第7代CPU平台驱动 指纹版)安装WIN7
  19. Kafka单机版安装教程及测试(附每一步操作截图及说明)【一看就懂】
  20. 音视频采集—Windows平台VFW

热门文章

  1. java信用分秒杀系统设计思路,秒杀系统设计思路
  2. make,makefile,cmake“暴力编译法”的个人经验或理解。
  3. jQuery全选反选实例
  4. JAVA的IO编程:管道流
  5. JQuery弹出层,点击按钮后弹出遮罩层,有关闭按钮
  6. Web服务技术协议:REST与SOAP
  7. 对比kCCPositionTypeFree和kCCPositionTypeRelative两种粒子移动类型
  8. 《实战突击.php项目开发案例整合》.(明日科技).[PDF]ckook
  9. 任务31:课时介绍 任务32:Cookie-based认证介绍 任务33:34课 :AccountController复制过来没有移除[Authorize]标签...
  10. Python学习(四) —— 编码