xmpp 与服务器连接并身份验证成功
* 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, )];
} } #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.设置用户名,密码,主机(服务器),连接时不需要password
NSString *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: 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 = @"";
[_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
xmpp 与服务器连接并身份验证成功的更多相关文章
- 阿里云Windows远程连接出现身份验证错误,要求的函数不正确”的报错。
最近很多阿里云用户在远程Windows Server的云服务器ECS时出现“身份验证错误,要求的函数不受支持”的报错. 这个问题解决起来非常简单,修改组策略中的一个配置就可以了. 在运行中输入gped ...
- HTTP 请求未经客户端身份验证方案“Anonymous”授权。从服务器收到的身份验证标头为“Negotiate,NTLM”
转自:http://www.cnblogs.com/geqinggao/p/3270499.html 近来项目需要Web Service验证授权,一般有两种解决方案: 1.通过通过SOAP Heade ...
- Win10系统进行远程桌面连接出现身份验证错误怎么办
在win10系统中,自带有远程桌面连接功能,但是有时候会遇到一些问题,比如有不少用户反映说在进行远程桌面连接的时候,出现身份验证错误的情况,导致远程连接失败,接下来给大家分享一下Win10系统进行远程 ...
- mstsc远程连接发生身份验证错误要求的函数不受支持
在win7电脑上使用远程连接连接一台服务器时,出现发生身份验证错误要求的函数不受支持的错误,原因是本地组策略配置错误,如下图: 解决办法: 进入windows命令行模式输入命令: 会弹出本地策略组编辑 ...
- WIN7远程桌面连接--“发生身份验证错误。要求的函数不受支持”
故障现象:WIN7发现远程桌面无法连接了,报“发生身份验证错误.要求的函数不受支持”的错误: 解决办法:开始菜单->运行gpedit.msc 打开配置项:计算机配置>管理模板>系统& ...
- WIN10远程桌面连接--“出现身份验证错误。要求的函数不支持”
最近WIN10升级补丁后发现远程桌面无法连接了,报“出现身份验证错误.要求的函数不支持”的错误: 解决办法: 第一种,配置本地自己的电脑,开始菜单->搜索gpedit.msc并打开 打开配置 ...
- Mysql 连接提示 Client does not support authentication protocol requested by server 客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端
由于查阅了很多百度文档发现很多方法比较复杂,所以写个备忘: 首先,进入MySQL 8.0Command Line Client -Unicode,输入密码,登录进去. 然后,在命令行输入:ALTER ...
- win10远程桌面连接提示身份验证错误,要求的函数不受支持的解决方案
转自https://www.baidu.com/link?url=67JXh4h79mN47mEenuH_ElGkSh9_GdOiY-Xp9Ihw0_mQIZHrPx-HxY3EIm_nTZKPoRZ ...
- 远程阿里云window服务器报错身份验证错误
整理文章,很久之前遇到的一个问题,一直呆在草稿箱,特发布出来,帮助可能遇到该问题的人 mstsc连接时报错如下 解决方法: 修改本地安全组策略[安全组 gpedit.msc]
随机推荐
- Fragment 创建及替换
1.Fragment的产生与介绍 Android运行在各种各样的设备中,有小屏幕的手机,超大屏的平板甚至电视.针对屏幕尺寸的差距,很多情况下,都是先针对手机开发一套App,然后拷贝一份,修改布局以适应 ...
- Struts2标签<s:checkboxlist>回显问题
Struts2 checkboxlist回显问题中,说明两种方式,第一种方式很普遍,第二种则是个人根据现有资源加上尝试得来的成果,第二种主要是为个人笔记(其中相关知识点不一一介绍). 一.普通方法: ...
- 如何使用KeyChain保存和获取UDID
本文是iOS7系列文章第一篇文章,主要介绍使用KeyChain保存和获取APP数据,解决iOS7上获取不变UDID的问题.并给出一个获取UDID的工具类,使用方便,只需要替换两个地方即可. 一.iOS ...
- 浏览器对DIV+CSS兼容性问题大总结
浏览器对DIV+CSS兼容性问题大总结 接触DIV+CSS架构已经快两年了,个人觉得css入门不难,但要学精并非一朝一夕的,现在大部分网络公司都比较主张用div+css来布局,这就面临着一个比较难的问 ...
- Longest Increasing Subsequence的两种算法
问题描述:给出一个序列a1,a2,a3,a4,a5,a6,a7-.an,求它的一个子序列(设为s1,s2,-sn),使得这个子序列满足这样的性质,s1<s2<s3<-<sn并且 ...
- Spark中Java函数的使用方法笔记
1: map 函数map是对RDD中的每个元素都执行一个指定的函数来产生一个新的RDD. 任何原RDD中的元素在新RDD中都有且只有一个元素与之对应. 2: mapPartitions函数</p ...
- CSS-学习笔记四
1.*用于匹配任何的标记 2.>用于指定父子节点关系 3.E+F毗邻元素选择器,匹配所以紧随E元素之后的同级元素F 4.E~F匹配所以E元素之后的同级元素F 5.名称[表达式] [att=val ...
- POJ 1998 Cube Stacking
Description Farmer John and Betsy are playing a game with N (1 <= N <= 30,000)identical cubes ...
- Stream.iterate方法与UnaryOperator
前提:本人在翻看<Java核心技术II>的时候在p17的时候发现一段代码不是很明白.不知道为什么就输出了1,2,3,4,5,6,7,8,9,10,...也不知道n-n.add(BigInt ...
- iOS7.1企业应用"无法安装应用程序 因为证书无效"的解决方案
今天升级了iOS7.1后发现通过之前的url无法安装企业应用了,一直提示“无法安装应用程序 因为http://xxx.xxx.xxx证书无效”,折腾了一番,终于在StackOverFlow上找到了答案 ...