*  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 与服务器连接并身份验证成功的更多相关文章

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

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

  2. HTTP 请求未经客户端身份验证方案“Anonymous”授权。从服务器收到的身份验证标头为“Negotiate,NTLM”

    转自:http://www.cnblogs.com/geqinggao/p/3270499.html 近来项目需要Web Service验证授权,一般有两种解决方案: 1.通过通过SOAP Heade ...

  3. Win10系统进行远程桌面连接出现身份验证错误怎么办

    在win10系统中,自带有远程桌面连接功能,但是有时候会遇到一些问题,比如有不少用户反映说在进行远程桌面连接的时候,出现身份验证错误的情况,导致远程连接失败,接下来给大家分享一下Win10系统进行远程 ...

  4. mstsc远程连接发生身份验证错误要求的函数不受支持

    在win7电脑上使用远程连接连接一台服务器时,出现发生身份验证错误要求的函数不受支持的错误,原因是本地组策略配置错误,如下图: 解决办法: 进入windows命令行模式输入命令: 会弹出本地策略组编辑 ...

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

    故障现象:WIN7发现远程桌面无法连接了,报“发生身份验证错误.要求的函数不受支持”的错误: 解决办法:开始菜单->运行gpedit.msc 打开配置项:计算机配置>管理模板>系统& ...

  6. WIN10远程桌面连接--“出现身份验证错误。要求的函数不支持”

    最近WIN10升级补丁后发现远程桌面无法连接了,报“出现身份验证错误.要求的函数不支持”的错误: 解决办法: 第一种,配置本地自己的电脑,开始菜单->搜索gpedit.msc并打开   打开配置 ...

  7. Mysql 连接提示 Client does not support authentication protocol requested by server 客户端不支持服务器请求的身份验证协议;考虑升级MySQL客户端

    由于查阅了很多百度文档发现很多方法比较复杂,所以写个备忘: 首先,进入MySQL 8.0Command Line Client -Unicode,输入密码,登录进去. 然后,在命令行输入:ALTER ...

  8. win10远程桌面连接提示身份验证错误,要求的函数不受支持的解决方案

    转自https://www.baidu.com/link?url=67JXh4h79mN47mEenuH_ElGkSh9_GdOiY-Xp9Ihw0_mQIZHrPx-HxY3EIm_nTZKPoRZ ...

  9. 远程阿里云window服务器报错身份验证错误

    整理文章,很久之前遇到的一个问题,一直呆在草稿箱,特发布出来,帮助可能遇到该问题的人 mstsc连接时报错如下 解决方法: 修改本地安全组策略[安全组  gpedit.msc]

随机推荐

  1. (转)Linux下清理Cache方法

    频繁的文件访问会导致系统的Cache使用量大增, 系统运行缓慢. 1 首先用free 命令查看内存的使用:$ free -m             total       used       fr ...

  2. mybatis 部署日志

    <!-- 打印查询语句 --> <setting name="logImpl" value="STDOUT_LOGGING" /> &l ...

  3. MYSQL 写入emoji表情字符处理

    这个鬼emoji表情是4个字节,mysql使用的utf8编码,UTF8占3个字节,要存储那个emoji表情需要将mysql编码由UFT8改为UFT8的超集,utf8mb4; 改数据库编码容易引起大面的 ...

  4. 百度影棒安装apk方法

    确保影棒和电脑接入家中同一WIFI中,开启影棒USB调试,手机端运行悟空助手或沙发管家等软件,之后无线推送需要安装的APK. 安装文件管理apk后,可以使用U盘安装.

  5. 使用javap深入理解Java整型常量和整型变量的区别

    我下图代码第五行和第九行分别定义了一个整型变量和一个整型常量: static final int number1 = 512; static int number3 = 545; Java程序员都知道 ...

  6. 使用prelu

    一个使用方式:http://blog.csdn.net/xg123321123/article/details/52610919 还有一种是像relu那样写,我就是采用的这种方式,直接把名字从relu ...

  7. StringMVCWeb接受前台值的几种方式

    这些决定与request   header   的Content-Type属性 1.通过@RequestParam @RequestParam Map<String, Object> pa ...

  8. jpeg和jpg的区别是什么

    JPG是JPEG的简写,jpg是后缀名,jpeg既可作为后缀名,又能代表文件格式:JPG——JPEG文件格式. 我们在系统自带的画图程序里保存文件,在保存类型:JPEG(*.JPG,*.JPEG,*. ...

  9. tomcat常用的优化和配置

    Tomcat 5常用优化和配置 1.JDK内存优化: Tomcat默认可以使用的内存为128MB,Windows下,在文件{tomcat_home}/bin/catalina.bat,Unix下,在文 ...

  10. Bootstrap select(选择列表)

    当您想让用户从多个选项中进行选择,但是默认情况下只能选择一个选项,则使用选择框 1.使用<select>展示列表选项 2.使用multiple="multiple"允许 ...