iOS客户端 Openfire服务 利用XEP-0065和XEP-0096 做out-of-band bytestream文件传输

Openfire服务可以做文件传输方法可供选择有:

    具体看协议文档,没搞过;XEP-0096中提到XEP-0066的drawbacks,原文:
    •   It is not reliable.
    •   It does not work when one of the parties is behind a firewall.
    •   It provides limited metadata about files to be exchanged
  • 还有一种,自建个文件服务器,发送方发送文件到文件服务器,上传成功后生成相应的缩略图(如果是图片文件的话)推送完成的消息给接收方,接收方收到消息后,去下载相应的文件,比较好理解,但我猜想每次比上述的方式多了次 磁盘IO;项目进度急得话,也是可以选用,可后续优化嘛。

我选的是XEP-0096和XEP-0065 :

XEP-0096对应的iOS版本文件 地址,XEP-0065 iOS 版本也可用上述地址的版本

初始化XMPPStream时需要注意:

    XMPPJID *jid = [XMPPJID jidWithString:[NSString stringWithFormat:@"%@@%@", account, XMPPDomain]];
    XMPPJID *jidWithResource = [jid jidWithNewResource:@"ios"];
    [self.xmppStream setMyJID:jidWithResource];

  普通JID格式如:[email protected] (形如 [email protected])

  第二行带上resource,不带我的程序报错:

  <error code="503" type="cancel"><service-unavailable xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error>

  应该是两端的resource不一致

初始化XMPPSIFileTransfer相应代码:

    NSString *sessionId = [_xmppStream generateUUID];
    _sifiletransfer = [[XMPPSIFileTransfer alloc] init];
    _sifiletransfer.sid = sessionId;
    [_sifiletransfer addDelegate:self delegateQueue:dispatch_get_main_queue()];
    [_sifiletransfer activate:_xmppStream];

发送文件:

- (void)sendImageMessage:(NSData *)imageData toAccount:(NSString *)account{
    XMPPJID *jid = [XMPPJID jidWithString:[NSString stringWithFormat:@"%@@%@/%@", account, XMPPDomain, [[_xmppStream myJID] resource]]];
    [_sifiletransfer initiateFileTransferTo:jid withData:imageData];
}

  其中文件接收方的JID完整格式:[email protected]/resource (形如 [email protected]/ios)

发送完成后在XMPPSIFileTransfer.h中的

@protocol XMPPSIFileTransferDelegate <NSObject>
@required
- (void)receivedImage:(NSData*)image from:(XMPPJID*)from;
@end

  可在你自己的文件中实现该方法接受文件

至此,我在内网可以通过此方式传输文件,Mac下得openfire服务,可选用源码或dmg方式 均可;

后来测试一端内网,一端外网出现错误,提示为:

  <error code="404" type="cancel"><item-not-found xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error>

openfire后台配置:

注意xmpp.proxy.externalip 填写你测试服务器的外网地址

路由器的7777端口也要映射到外网,如图:

至此,内外网两端发送文件测试也通过。

希望能帮到您。

时间: 2024-11-06 10:44:17

iOS客户端 Openfire服务 利用XEP-0065和XEP-0096 做out-of-band bytestream文件传输的相关文章

iOS 客户端与服务端做时间同步

需求 我们做客户端的时候,有时会需要对客户端与服务器的时间进行同步,比如抢购活动.倒计时等.这时我们要考虑如何准备地与服务器的时间进行同步,同时防止用户本地的时间有误差时导致的问题. 分析 描述 为了实现以上需求,我们需要: 获取服务器某一时刻 A 的时间: 记录获取到时刻 A 时的本地时间 B: 需要用到时间时,获取当前本地时间 C,当 C - B 作为时间间隔 D,则 A + D 则是当前服务器的时间. 实现 从上面的步骤,我们可以得到,要消除用户修改时间导致的影响,必须保证 B 和 C 与

Socket在iOS客户端上的简单实现 - 利用GCAsyncSocket框架

GCAsyncSocket 这是一个2003的开发出来的一个开源框架 首先把GCDAsyncSocket的.h和.m文件拖入到工程中 试图控制器遵守GCDAsyncSocketDelegate协议 实例:在页面上有一个简单的textView和textField 在textField中输入文字后,点击发送即可把文字发送到服务器 ,服务器端返回的文字数据会显示到textView上 //  服务器主机ip地址#define kHost @"172.16.3.101"//  服务器主机通信端口

恩布企业 IM iOS 客户端 0.9.6,服务端 1.11 发布

恩布企业IM,免费企业即时通讯,企业内部通讯平台,iOS苹果开源手机客户端EntboostChat发布0.9.6版本,同时服务更新至1.11版本; iOS苹果手机端主要更新内容: 优化个人默认头像图标显示逻辑 修复聊天会话界面记录重复问题 支持群组聊天会话成员在线状态 优化联系人界面:增加查看用户.群组属性界面 管理临时讨论组,管理成员功能 管理个人群组,管理成员功能 增加好友/个人通讯录管理功能 增加动态消息通知功能 服务端主要更新内容: 恩布IM管理中心增加企业组织结构管理:公司列表,群组列

搭建基于asp.net的wcf服务,ios客户端调用的实现记录

一.写wcf 问题: 1.特定的格式 2.数据绑定 3.加密解密 二.发布到iis 问题: 1.访问权限问题,添加everyone权限 访问网站时:http://localhost/WebbUploadSample/ZipUpload.aspx “/WebbUploadSample”应用程序中的服务器错误. -------------------------------------------------------------------------------- 访问被拒绝. 说明: 访问服

iOS xmpp学习 - 环境搭建(配置mysql与openfire服务端)

1> 安装数据库mysql -安装mysql-5.7.12-osx10.11-x86_64.dmg -上面这个mysql是新版本的, 只有一个主安装程序包含全部功能 -在老版本的mysql中会有3个需要安装的程序 *mysql-版本号-要求系统版本-x86_64.dmg     // 这个是主安装程序 *MySQL.prefPane     // 这个是系统偏好管理, 就是在'系统偏好设置'里面添加mysql管理程序 *MySQLStartupItem.pkg     // 自动启动MySQL服

XMPP 客户端和服务端

GPLv2授权不能商用 XMPP协议的客户端软件列表 http://zh.wikipedia.org/wiki/XMPP%E5%8D%94%E8%AD%B0%E7%9A%84%E5%AE%A2%E6%88%B6%E7%AB%AF%E8%BB%9F%E9%AB%94%E5%88%97%E8%A1%A8 下列是片面的即时消息客户端支持Jabber/XMPP协议的清单[1]. 目录 [隐藏] 1 单一协议XMPP客户端 1.1 开放源代码软件 1.2 专有的免费软件 1.3 商业软件 2 多通讯协议客

猿题库 iOS 客户端架构设计(原文地址:http://gracelancy.com/blog/2016/01/06/ape-ios-arch-design/)

猿题库 iOS 客户端架构设计 序 猿题库是一个拥有数千万用户的创业公司,从2013年题库项目起步到2015年,团队保持了极高的生产效率,使我们的产品完成了五个大版本和数十个小版本的高速迭代.在如此快速的开发过程中,如何保证代码的质量,降低后期维护的成本,以及为项目越来越快的版本迭代速度提供支持,成为了我们关注的重要问题.这篇文章将阐明我们在猿题库 iOS 客户端的架构设计. MVC MVC,Model-View-Controller,我们从这个古老而经典的设计模式入手.采用 MVC 这个架构的

基于Doubango的iOS客户端开源框架

一.ios-ngn-statck工程 1.Tests ---功能测试 2.底层模块(c和c++) Doubango --- 基于3GPP IMS/RCS 并能用于嵌入式和桌面系统的开源框架 1) tinyWRAP --- c++代码,对c代码以面向面向对象的方式进行封装,提供给上层调用. 2) tinyDAV --- Doubango媒体音频/视频控制,tinyMedia核心框架 a) audio --- 音频 b) codecs --- 编解码器 c) msrp --- 文件传输 d)vide

IOS框架和服务

在iOS中框架是一个目录,包含了共享资源库,用于访问该资源库中储存的代码的头文件,以及图像.声音文件等其他资源.共享资源库定义应用程序可以调用的函数和方法. iOS为应用程序开发提供了许多可使用的框架,并构成IOS操作系统的层次架构,分为四层,从上到下依次为:Cocoa Touch Layer(触摸UI层).MediaLayer(媒体层).Core Services Layer(核心服务层).Core OS Layer(核心OS层). 低层次框架提供IOS的基本服务和技术,高层次框架建立在低层次