zoukankan      html  css  js  c++  java
  • 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);
    }
  • 相关阅读:
    Word Puzzles [POJ 1204]
    set用法
    FOJ有奖月赛2012年11月
    BerDonalds
    POJ1469 匈牙利算法
    后缀数组
    ZOJ Monthly, January 2013
    算法导论<一>
    Yell Classico
    点聚 WebOffice 编辑辅助控件 WebOffice.OCX
  • 原文地址:https://www.cnblogs.com/zyb428/p/5123003.html
Copyright © 2011-2022 走看看