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的用户名就是test123@127.0.0.1

 

然后运行,没有报错,在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:@"test123@127.0.0.1"]];
    [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);
}

 

转载于:https://www.cnblogs.com/zyb428/p/5123003.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值