iOS开发之XMPP即时通讯简单实现

首先搭载服务器和数据库

搭载服务器我用的是openfire,数据库用的是mysql

这里推荐两个链接

配置mysql,用的是mysql workbench

http://justsee.iteye.com/blog/1753467

配置服务器 openfire

http://www.cnblogs.com/xiaodao/archive/2013/04/05/3000554.html

先配置好数据库然后配置服务器

两个都打开

下一个XMPP客户端,就是用来测试的

我下的是Adium

这里下

http://xmpp.org/xmpp-software/clients/

然后在Adium里面添加帐号,服务器要用openfire设置好的127.0.0.1,端口用5222

这里openfire里面的服务器端口,5222是客户端连接服务器

登录成功后可以在openfire里面看到用户已经在线

然后另一客户端,我直接用代码,觉得麻烦没做界面

设置XMPPStream

然后设置帐号,至少测试,所以直接在viewDidLoad里面写了

然后就是验证密码,下面的方法是上线,这些是代理方法,记得设置XMPPStream的代理

这是接受信息的方法,我没做界面,直接打印出来接受的信息

如果验证失败的话,会调用这个方法

刚开始我运行一直返回XMPP验证失败的错误

后来在openfire查看用户名必须带 服务器名

例如我的帐号是test123,设置JID的用户名就是[email protected]

然后运行,没有报错,在openfire显示已经在线

然后就可以开始聊天了,下面的是刚发的,上面的是之前的聊天记录

发了文字和一个链接

然后Xcode输出

即时通讯最简单的就这样,退出APP后openfire后台就会显示下线

代码

#import "ViewController.h"
#import "XMPP.h"

@interface ViewController ()<XMPPStreamDelegate>

@property(nonatomic,strong) XMPPStream *stream;

@end

@implementation ViewController

- (XMPPStream *)stream
{
    if (!_stream) {
        _stream = [[XMPPStream alloc] init];
        [_stream addDelegate:self delegateQueue:dispatch_get_current_queue()];
    }
    return _stream;
}

- (void)viewDidLoad {
    [super viewDidLoad];

    [self.stream setMyJID:[XMPPJID jidWithString:@"[email protected]"]];
    [self.stream setHostName:@"127.0.0.1"];
    [self.stream setHostPort:5222];

    NSError *error = nil;
    [self.stream connectWithTimeout:1.0f error:&error];

    if (error) {
        NSLog(@"connectWithTimeout : %@",error);
    }
}

- (void)xmppStream:(XMPPStream *)sender didReceiveMessage:(XMPPMessage *)message
{
    NSString *msg = [[message elementsForName:@"body"] lastObject];
    NSLog(@"%@",msg);

}

- (void)xmppStreamDidConnect:(XMPPStream *)sender
{
    NSError *error = nil;
    [self.stream authenticateWithPassword:@"test123" error:&error];
    if (error) {
        NSLog(@"authenticateWithPassword : %@",error);
    }
}

- (void)xmppStreamDidAuthenticate:(XMPPStream *)sender
{
    XMPPPresence *presence = [XMPPPresence presence];
    [self.stream sendElement:presence];
}

- (void)xmppStream:(XMPPStream *)sender didNotAuthenticate:(DDXMLElement *)error
{
    NSLog(@"didNotAuthenticate : %@",error);
}
时间: 2024-10-25 15:42:24

iOS开发之XMPP即时通讯简单实现的相关文章

iOS开发之XMPP

iOS开发拓展篇-XMPP简单介绍 一.即时通讯简单介绍 1.简单说明 即时通讯技术(IM)支持用户在线实时交谈.如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并让交谈双方都看到交谈的内容 有许多的IM系统,如AOL IM.Yahoo IM. MSN以及QQ,它们最大的区别在于各自通讯协议的实现,所以即时通讯技术的核心在于它的传输协议 协议用来说明信息在网络上如何传输,如果有了统一的传输协议,那么应当可以实现各个IM之间的直接通讯,为了创建即时通讯的统一标准,目前已

iOS开发之WKWebView简单使用和常用使用场景

iOS开发之 WKWebVeiw使用 想用UIWebVeiw做的,但是突然想起来在iOS8中出了一个新的WKWebView,算是UIWebVeiw的升级版.本着对新事物的好奇,就上网查了一下,但是找了好多个都没说的多了详细,于是就问谷歌,找文档,看看使用方法,试用了一下,果然不错,记录下来,大家分享! WKWebView的特点: 性能高,稳定性好,占用的内存比较小, 支持JS交互 支持HTML5 新特性 可以添加进度条(然并卵,不好用,还是习惯第三方的). 支持内建手势, 据说高达60fps的刷

iOS开发之Socket通信实战--Request请求数据包编码模块

实际上在iOS很多应用开发中,大部分用的网络通信都是http/https协议,除非有特殊的需求会用到Socket网络协议进行网络数 据传输,这时候在iOS客户端就需要很好的第三方CocoaAsyncSocket来进行长连接连接和传输数据,该第三方地 址:https://github.com/robbiehanson/CocoaAsyncSocket,读者可以自行google或者baidu搜索 这个库的用法,网上有很多资料,而且用法不难. 在一些对Socket通信使用需求不是很高的应用中,比如需要

李洪强IOS开发之iOS好项目收集

李洪强IOS开发之iOS好项目收集 在这里收集一些最近出现的比较实用好玩的框架或者项目,会不断更新 项目 简述 日期 SCTableViewCell 类似与QQ侧滑删除Cell的Demo 201501018 JHChainableAnimations 可读性好使用方便的动画库,语法类似与Masonry,使用链式编程 20150506 awesome-ios-chart iOS平台下的各种图表组件 20150513 DevArticles iOS Animation 主流炫酷动画框架(特效)收集整

xmpp即时通讯协议的特性---长处和缺点!

xmpp协议的定义? XMPP是一种基于标准通用标记语言的子集XML的协议,它继承了在XML环境中灵活的发展性. 因此.基于XMPP的应用具有超强的可扩展性.经过扩展以后的XMPP能够通过发送扩展的信息来处理用户的需求.以及在XMPP的顶端建立如内容公布系统和基于地址的服务等应用程 序. 并且,XMPP包括了针对server端的软件协议,使之能与还有一个进行通话,这使得开发人员更easy建立客户应用程序或给一个配好系统加入功能. 在此我概括一下xmpp协议的优缺点: 长处: XMPP协议是自由.

iOS开发之UILabel

UILabel是iOS开发中常用的一个组件,主要用来显示内容. UILabel的主要使用如下: ? 1 2 3 4 5 6 7 8 9 10 /*尺寸*/ CGRect labelRect = CGRectMake(100, 100, 80, 40); /*初始化*/ UILabel *titleLabel = [[UILabel alloc] initWithFrame:labelRect]; /*一些属性的设置*/ titleLabel.font = [UIFont systemFontOf

iOS开发之多XIB之间相互关联

Xib link Xib 1.直接加载xib中的UIView 创建一个View1.xib, 随便设一个背景色,加一个标识UILabel, 这样好知道是这个view是哪一个view. 你可以在这个view上加作意的subview,我只是说明原理,所以这儿并没有加作何subview. 最终我的View1如下图: 由于View1会放到其它View上作为subview,所以这儿size是Freeform, Status Bar是:None. 将下面代码放到viewDidLoad中: &1这行代码就是加载

iOS开发之MVVM在项目中的应用

今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦~). 由于本人项目经验有限,关于架构设计方面的东西理解有限,我个人对MVVM的理解主要是借鉴于之前的用过的MVC的Web框架~在学校的时候用过ThinkPHP框架,和SSH框架,都是MVC的架构模式,今天MVVM与传统的MVC可谓是极为相似,也可以说是兄弟关系,也就是一家人了. 说到架构设计和团队

李洪强iOS开发之RunLoop的原理和核心机制

李洪强iOS开发之RunLoop的原理和核心机制 搞iOS之后一直没有深入研究过RunLoop,非常的惭愧.刚好前一阵子负责性能优化项目,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研究了RunLoop的原理和特性. RunLoop的定义 当有持续的异步任务需求时,我们会创建一个独立的生命周期可控的线程.RunLoop就是控制线程生命周期并接收事件进行处理的机制. RunLoop是iOS事件响应与任务处理最核心的机制,它贯穿iOS整个系统. Foundation: NSRunLo