客户端A向B 发送文件的过程:
两个XMPP节点之间传输文件一般有三种方式:
- Out-of-Band Data 具体见XEP-0066:点击打开链接
- in-band bytestream 适合传输较小的数据,通过直接携带在XML中进行传输 具体见:XEP-0047:点击打开链接
- socks5 通过服务器代理的方式,实现两个节点之间的直接传输
以下为通过socks5 方式传输文件的过程:
1.A向B发送请求查询B是否支持字节流。
2.B返回应答
3.A向服务器发送请求,查询可用的代理
4.服务器应答,返回目前disco列表中所有可用的服务项
5.A验证服务器中每一项是否是字节流代理
6.服务器应答每一项的查询结果
7.A发送请求,查询代理服务器的网络地址
8.服务器返回代理服务器的网络地址(包括IP和端口)
9.A通知B代理服务器的地址
10.B与代理进行验证和连接初始化
一旦A通知完B后,B就要主动与代理服务器建立socks5连接。
代理服务器中保持有一个ProxyConnectionManager,它绑定到一个IP和端口,然后启动一个线程不断地监听这个端口。在监听到B的连接后就调用processConnection()来处理。先验证是否为socks5类型的连接,再读取支持的验证方式,然后生成一个ProxyTransfer对象。用到B的socket连接来初始化此对象的outputStream,存入map中备用。
11.B通知A自己与代理建立了连接
12.A与代理服务器建立连接
A接到通知后,主动与代理服务器建立连接。此时代理会用此连接来初始化已有ProxyTransfer对象的inputStream。如此一来ProxyTransfer就同时持有到A的inputStream和到B的outputStream。[参见上面的代码]
13.A发送请求给代理服务器,激活传输流
由DefaultProxyTransfer.doTransfer()方法来处理。不断从服务器与A建立的inputStream中读取数据,然后写入与B建立的outputStream中。
14.服务器通知A激活的结果
15.A与B开始传输
原理上讲流被激活,传输就已经开始了。
PS:对于离线文件的传输个人认为比较好的方法就是建立一个专门用于文件传输的客户端。此客户端一直连接到openfire上,当有离线文件需要发送时先将文件发往此客户端,并在数据库中建立离线发送机制。当对方上线后读取数据库中的信息,再由此客户端发送给目标节点。这样做的好处就是最终文件的存储方式可自己决定,而且最重要的是简单!
实际商业环境中多不采用XMPP文件传输协议,而是通过http,ftp等其他方式进行文件上传下载,XMPPServer只作为文件信息的传输中介。
更多详细分析敬请期待.....
分享到:
相关推荐
基于Asmack库 xmpp 协议 socket5 文件传输
通过绑定你的gmail邮箱 既可以通过xmpp协议即时传输数据
Ⅺ咿P协议的即时通信系统,文件传输只是作为系统的最重要 的组成部分,用于传输普通的文件及在系统中用到的数字签名 文件。基于)m但P协议的文件传输也是基于Ⅺv儿流的传输方 式传输数据,为以后不同风格代码和外来...
XMPP体系架构 XMPP server:其内核是一个XMPP路由器,完成基本组件间的数据包交换和路由。 功能: 1.会话管理器:负责客户端会话认证,在线状态,用户联系表等 ...5.传输器:建立xmpp服务器与非xmpp服务器通信
安卓xmpp聊天之文件传输
xmpp协议介绍PPT,详细介绍了XMPP核心协议方方面面
XMPP 常用XEP协议,有145个PDF文档 包含文件传输、语音和视频等协议
android的XMPP客户端
android项目中打印xmpp协议(收发的报文)到日志文件,只需将代码中使用的Log.debug替换为你自己输入到日志文件的代码即可,详情见https://blog.csdn.net/w690333243/article/details/79963639
android 电子文档 XMPP总结 文档
xmpp协议和xmpp扩展协议,chm格式
基于XMPP的多方通信系统研究与实现.pdf 基于XMPP的P2P即时通信系统的研究及实现.kdh 基于SIMPLE和XMPP协议的移动IM研究.pdf XMPP研究与应用.pdf XMPP协议研究及其在IM系统群组通信中的应用.pdf XMPP协议分析及客户端...
NULL 博文链接:https://hxxyyang.iteye.com/blog/1329640
XMPP是一种基于XML的协议,它继承了在XML环境中灵活的发展性。因此,基于XMPP的应用具有超强的可扩展性。经过扩展以后的XMPP可以通过发送扩展的信息来处理用户的需求,以及在XMPP的顶端建立如内容发布系统和基于地址...
erlang分布式 XMPP Seerlang分布式 XMPP Serverrvererlang分布式 XMPP Servererlang分布式 XMPP Server
Learn about the fundamentals of XMPP and be able to work with the core functionality both server-side and in the browser Build a simple 1-to-1 chat (the "Hello World" of XMPP), explore multi-user chat...
XMPP协议分析,xmpp是即时通讯IM中比较普遍的应用
xmpp
此文件是ios 用xmpp开发即时通讯的服务器
xmpp api文档