(iOS)基于XMPP协议的简单IM实现

iOS端IM开发从入门到填坑 IM开发从入门到填坑Demo IM的实现方式 拿来主义,使用第三方IM服务 IM的第三方服务商国内有很多,底层协议基本上都是基于TCP的,类似有网易云信、环信、融云、极光IM、LeanCloud、云通讯IM(腾讯)、云旺IM(阿里)、容联云、小能、美洽等等,技术也相对比较成熟,提供后台管理和定制化的UI,拿来主义,半小时集成。 缺点也很明显:定制化程度太高,需要二次开发,很多东西我们不可控... 阅读详情
 

(iOS)基于XMPP协议的简单IM实现

分类: iphone 平台 iphone+平台   8444人阅读  评论(5)  收藏  举报

基于XMPP协议的简单IM实现(iOS)(含Demo)

分类: IOS-XMPP协议学习   1216人阅读  评论(16)  收藏  举报

【  **********************************************************************************

有网友在资源那留言,但是自己无法评论自己的资源,故在此说明:
1、当初只是简单的学习XMPP,通过自己做了个小Demo来了解其原理,进攻各位初识XMPP的参考
2、服务器采用了openfire的朋友,遇到了诸如列表无法获取等问题,我没试过,会抽时间去实践下,到时候和大家一起探讨,不过还是建议多看看正文前面推荐2位大神的BLOG,先对原理有所认识先~!
3、多谢大家指正,共同探讨,一起进步~!嘿嘿~!

**********************************************************************************   】


进入正题前,首先感谢下 @nomousewch 和 @kangkangz4 两位在我学习过程中对我的帮助,正是参见了两位的Blog,我才完成对XMPP协议的初步学习。

若想了解XMPP协议的简介,请查看 @nomousewch 的Blog。以下主要讲解我如何实现一个基于XMPP的简单即时聊天Demo。


一、XMPP服务器

首先我们需要一个XMPP服务器,在此Demo中,我采用主机作为服务器来使用。

到 XMPP Servers 下载 ejabberd 这个服务器。



我下载的是 ejabberd-2.1.11-darwin-x86-installer.app.zip 这个版本,便于在Mac 下安装:



 然后解压安装,一步一步的进行既可。当到达填写服务器域名时,会有个默认值,即你机子的名字,默认既可,不用更改:



然后就是 管理员用户名的填写和密码的填写,这些值自己填写后一定要记住,因为每次登陆服务器需要认证填写。

安装成功后,在安装目录下点击运行 start :



注意:运行前,请检查好自己的网络设置。(我之前老打不开一下界面的网页,提示错误,后来换了个网络就OK,怀疑是因为翻墙的原因)。


点击 admin interface 后,会要求输入用户名 (格式: 管理员名 @ 服务器域名.local )和密码。然后进入到服务器管理界面。

 


点击 虚拟主机,你会看到一个列表,点击主机列下的服务器域名.local  连接,会展开左侧的列表



点击用户,你就可以创建几个用户,便于之后的数据交互。


以上就是服务器的搭建。下面简单讲解下客户端。


二、XMPP客户端

这里说的客户端,当然不是我们稍后会讲的基于xmpp framework实现的Demo,而是将和我们Demo交互信息的另一方客户端。请到 XMPP Clients 下载 Adium 这个服务器(当然,你也可以选择其他的客户端,只要支持Mac OS X 既可。

     下载后按提示一步一步安装既可。注:你可以添加账号,选择XMPP类型,输入完整的账号及密码,你可以添加多个刚刚你在服务器上创建的用户,同时,你可以选择联系人来互设好友,便于之后的数据交互。


三、基于XMPP协议的简单 IM 实现

1、首先到Git 上下载 xmppframework 框架

2、新建一个项目,将以下文件加入工程中,记住选择Copy



加入所需框架,如下,并设置好路径:

     


关于代码的解释,望见谅,详见 源码 ,代码结构没怎么优化,忘见谅。

最后的效果图如下:




XMPP message push实现分析 XMPP message push实现研究   XMPP(可扩展消息处理现场协议)是基于XML的协议,它用于即时消息(IM)以及在线现场探测。利用该协议可以实现类似QQ那样的实时聊天工具。 优点: l  有大量基于XMPP的开源IM应用; l  XMPP协议已经被IETF标准化,定义在RFC 3920及RFC 3921,以及众多的后续补充协议中。协议相对来说已经比较成熟; l  安 阅读详情

相关推荐

ios开发IM与音视频

2024之OC-Swift现状。

逝水无情的博客 850

基于XMPP协议的简单IM实现(iOS)(含Demo)

进入正题前,首先感谢下 @nomousewch 和 @kangkangz4 两位在我学习过程中对我的帮助,正是参见了两位的Blog,我才完成对XMPP协议的初步学习。 若想了解XMPP协议的简介,请查看 @nomousewch 的Blog。以下主要讲解我如何实现一个基于XMPP的简单即时聊天Demo。 一、XMPP服务器 首先我们需要一个XMPP服务器,在此Demo中,我采用主机作为

wwmusic的专栏 1万+

IM云即时通讯源码分析-哇谷IM团队

哇谷科技即时通讯系统支持领域,医疗,教育,商城,通信,金融,娱乐,社区,直播,传统行业专业定制,企业云办公,军用加密通信,企业加密通信,企业红包工资系统,企业研究所专项检测系统,AI智能化系统,等系统搭建,定制系统,专业开发通信协议SIP :IETF通讯对话初始协议和表示扩展协议。 1、即时通讯技术 即时通讯(IM:Instant Messaging):又称实时通讯,支持用户在线实时交谈,允许两人...

即时通讯微信 2862

iOS即时通信之XMPP框架的使用及原理简介

XMPP框架的使用及原理

代码解释生活 3668

基于XMPP的iOS聊天功能完整实现方案

说了这么多,你可能会问:现在都2025年了,为啥还要搞XMPP?不是有WebSocket + JSON + 自定义协议更简单吗?答案是:简单≠可靠,灵活≠持久。XMPP的优势在于:标准化程度极高:RFC规范严谨,互操作性强去中心化架构:支持联邦通信,打破信息孤岛长期演进能力:XEP机制保障协议可持续发展安全模型成熟:TLS + SASL + OMEMO端到端加密全套可选。

weixin_34162851的博客 764

基于XMPP协议的简单IM实现的Demo(iOS)

初步学习XMPP协议,并完成了一个基于XMPP的简单即时通信Demo。

[iPhone高级] 基于XMPP的IOS聊天客户端程序(IOS端一)

介绍完了服务器,这篇我们就要介绍重点了,写我们自己的IOS客户端程序 先看一下我们完成的效果图 首先下载xmppframework这个框架,下载 点ZIP下载 接下来,用Xcode新建一个工程 将以下这些文件拖入新建工程中 加入framework 并设置 到这里我们就全

黑菜妞妞的专栏 1027

汽车诊断之UDS入门-0x19 0x0A服务

0x19 0x0A解析

weixin_44842720的博客 3836

基于XMPP协议的简单IM实现(iOS)

//http://blog.youkuaiyun.com/fhbystudy/article/details/16117561 【  ********************************************************************************** 有网友在资源那留言,但是自己无法评论自己的资源,故在此说明: 1、当初只是简单的学习XMP

心灵的流放地, 共同的精神家园 981

iTunes登录协议抓包实战:绕过反检测与TLS解密的完整方案

在软件逆向与网络协议分析中,抓包工具扮演着关键角色。代理型工具如Fiddler通过修改系统代理实现HTTPS解密,而驱动型工具如HTTPDebugger则注入进程钩取网络API,但这些实现机制往往会被具有反检测策略的客户端识别。以iTunes登录协议为例,其内置证书锁定、进程完整性与系统代理检测等防护,导致常规抓包方案失效。从工具原理出发,对比不同抓包方案的暴露面,重点介绍如何利用Fiddler通过中间人代理获取明文流量,以及使用Wireshark进行被动监听规避检测的进阶技巧,并总结常见问题排查经验,为分

weixin_28607671的博客 366

【Labview学习】——如何实现软件的中/英文切换

各位亲爱的小伙伴们大家好,这里是小万的labview专题,今天为大家带来的是软件的中/英文切换,在全球化的浪潮之下,各行各业发生着巨大的变化,emmm………… 以下是简单的演示图片,注意观察菜单栏和软件界面各控件的语言状态: 本次分享将分为两部分:菜单中英文切换&界面控件中英文切换 ** 菜单中英文切换 ** 1. 中/英文菜单制造 要想实现菜单的中/英文语言切换,就得做两个菜单,一个...

weixin_44827166的博客 1万+

IM开发-XMPP iOS开发(转)

最近项目中需要集成IM功能,市面上有很多的第三方提供im服务,比如环信、融云等,但都有使用限制的地方,如果不使用第三方可以自己去实现一套IM系统,不过一个IM系统涉及到的东西比较多,开发难度较高。另一种选择是使用xmpp,xmpp的优点是有很多的开源实现,比如服务端的ejabberd、Openfire,iOS以及安卓端都很优秀的开源库可以使用,而且传输安全以及扩展性强等(环信也是基于xm...

245

WSL2网络配置全攻略:如何让Windows和Linux子系统互相访问端口(附防火墙设置)

本文深入解析WSL2的网络架构,并提供详细的端口互通配置指南。针对WSL2与Windows宿主机之间常见的网络访问问题,文章从原理出发,逐步讲解如何识别网络环境、配置Windows防火墙规则、调整服务监听地址,并介绍镜像网络模式等进阶优化方案,最终实现稳定可靠的双向端口访问。

sony5的博客 1148

iOS IM自研方案

这里写自定义目录标题 前言 本文会用实例的方式,将iOS各种IM的方案都简单的实现一遍。并且提供一些选型、实现细节以及优化的建议。 注:文中的所有的代码示例,在github中都有demo:https://github.com/tuyaohui/IM_iOS (demo) 可以打开项目先预览效果,对照着进行阅读。 言归正传,首先我们来总结一下我们去实现IM的方式 第一种方式,使用第三方IM服务 对于短平快的公司,完全可以采用第三方SDK来实现。国内IM的第三方服务商有很多,类似云信、环信、融云、LeanClo

weixin_43487250的博客 1709

STC89C52RC单片机原理图详解

左侧A0和右侧B0为一 一对应的关系,左上角DIR为控制数据方向端口,如果DIR接高电平是将左侧数据A0~A8送到右侧B0~B8,如果DIR接低电平,是将右侧数据B0~B8送到左侧A0~A8,由于在电路板上LE始终与VCC连接,因此这里。74HC595是串行输入,并行输出的移位寄存器,可用3根线输入串行数据,8根线输出并行数据,多片级联后,可输出16位、24位、32位等,常用于I/O口扩展。由于数码管为共阴极,给数码管下面接口输入阳码时,LED才亮,但是直接将P0~P7的高电平输入到数码管时,

m0_50562428的博客 6万+

【rotors】多旋翼无人机仿真(五)——多无人机仿真

如何创建多个无人机仿真

caiqidong321的博客 2392

XMPP学习(五)XMPP简单实现

XMPP中文文档:http://wiki.jabbercn.org/ 参考博文: XMPP系列博客https://blog.youkuaiyun.com/u011619283/article/category/6402547 详细介绍XMPP类:https://www.jianshu.com/p/c196135efc45 设置后台模式(还未成功?已成功):https://blog.youkuaiyun.com/r...

夏目三三 1015

Sigrity OptimizePI Best Capacitor Location Estimation模式如何评估电容最佳位置操作指导

Sigrity OptimizePI Best Capacitor Location Estimation模式用于前仿真分析,评估电容的最佳位置以获得最小回路电感,如何分析,以下图为例进行说明。IC devices,输入U*, A*, B*, Q*, P*,将所有这些字母开头的器件都识别为IC。Min设置为1(最少电容个数为1),max设置为28(最多电容个数为28)Capacitors 输入C*,将所有C开头的器件都识别为电容。Grid X设置为8,Grid Y也设置为8。

weixin_54787054的博客 382

iOS 使用XMPP框架开发IM聊天模块,实现简单的文字聊天

首先,还是先搭建一个测试服务器吧。 参考网址:http://code.tutsplus.com/tutorials/building-a-jabber-client-for-ios-server-setup--mobile-6958 搭建eJabberd服务器,mac系统安装包下载地址:http://pan.baidu.com/s/1dFgADOX 按照教程来走,有不一样的百度一下,基本

pilgrim1385的专栏 2486

OpenClaw实战-行政与HR必备:AI驱动的办公自动化

智能会议纪要自动生成会议时间智能协调自动提醒和跟进简历智能筛选和匹配度分析面试安排自动化入职办理流程化通知公告一键发布发票识别和报销辅助资产管理数字化让AI处理繁杂的事务性工作,让您有更多时间专注于更有价值的战略和管理任务。

gaoxiang_120的专栏 219

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

iOS 开发 XMPP即时通讯项目开发(仿微信)-详解之XMPP入门

iOS 开发 XMPP即时通讯项目开发(仿微信)-详解之XMPP入门1.即时通信(Instant Message /IM)的含义即时通信软件发展产品最早的创始人是三个以色列青年,是他们在1996年做出来的,取名叫ICQ。1998年当ICQ注册用户数达到1200万时,被AOL看中,以2.87亿美元的天价买走。ICQ有1亿多用户,主要市场在美洲和欧洲,已成为世界上最大的即时通信系统。即时通讯技术(IM

高级软件开发工程师--周玉的博客 2544

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

iOS - XMPP 的使用

1、XMPP XMPP 是一个基于 Socket 通信的即时通讯的协议,它规范了即时通信在网络上数据的传输格式,比如登录,获取好友列表等等的格式。XMPP 在网络传输的数据是 XML 格式。 开发架构: iOS 框架:XMPPFramework 服务器:Openfire 数据库:MySQL 2、XMPPFramework 框架简介 2.1 XMPPFramework 简介 XMP...

rstbfveradsvc 290

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

上一篇: iOS 使用AsyncSocket实现RTSP协议
下一篇: iOS开发的22个巧技
KingOfTheCoders
博客等级 码龄12年 1粉丝 18原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值