客户端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只作为文件信息的传输中介。
更多详细分析敬请期待.....
分享到:
相关推荐
- **可靠性和安全性**:通过对传输过程中的数据进行加密处理,确保文件传输的安全性;同时,通过引入错误校验机制提高传输的可靠性。 - **移植性**:由于系统是使用Java编写的,因此可以在多种操作系统平台上运行,...
XMPP是一个基于XML的开放标准,用于实时通信和消息传递,它支持多种功能,包括聊天、群聊、文件传输等。下面将详细阐述如何在Android平台上构建一个XMPP应用程序,并解释相关技术点。 首先,理解XMPP协议的关键概念...
总之,创建Android的XMPP客户端涉及到的知识点包括XMPP协议原理、Android开发环境、Smack库的使用、网络连接管理、异步编程、消息收发、群组聊天、文件传输以及推送通知的集成。通过熟练掌握这些技术,开发者可以...
总结来说,asmack2是在asmack基础上优化的版本,尤其针对OpenFire环境下的文件传输问题进行了修复,为开发者提供了更稳定的XMPP文件传输功能。在使用asmack2时,需要注意适配Android系统,正确配置服务器连接参数,...
XMPP还支持扩展,允许添加新的功能和服务,如多用户聊天室(MUC)、文件传输和隐私设置等。 总之,XMPP是一个强大且灵活的即时通讯协议,它的开放式架构和XML基础使其成为构建分布式、安全即时通讯系统的理想选择。...
本文将深入探讨如何在Android平台上使用ASmack库来实现XMPP聊天通讯,包括用户注册、登录、多人聊天室以及文件传输等核心功能。 首先,ASmack是Smack库的一个分支,专门为Android平台优化,它允许开发者轻松地集成...
此外,Strophe还支持处理其他XMPP实体,如订阅和呈现(Presence)、群组聊天(MUC)、文件传输等。通过扩展Strophe的XML stanza构造函数,我们可以轻松处理各种复杂的XMPP操作。 总之,Strophe.js提供了一种简单...
这使得XMPP不仅限于简单的文本聊天,还可以支持文件传输、群聊、视频通话等复杂功能。它的设计遵循了发布/订阅模型,增强了消息传递的可靠性和实时性。 在跨平台方面,XMPP客户端开发库通常可以运行在多种操作系统...
XMPP(Extensible Messaging and Presence Protocol)是一种基于XML的开放标准协议,主要用于即时通讯...开发者可以选择不同的客户端库,如Gloox或Libpurple,来实现符合XMPP标准的文件传输功能,从而简化开发过程。
通过分析和学习这个项目,开发者可以快速理解和掌握XMPP文件传输的实现细节。 总结,实现"android手机间smack传输文件"涉及对XMPP协议的理解,Smack库的使用,以及Android平台特有的问题处理。这个过程需要扎实的...
许多第三方插件和服务已经利用这一点添加了如VoIP、视频通话、文件传输等功能。 在这个“xmpp通讯协议demo”中,开发者很可能是使用了开源的XMPP库,例如Smack或asmack,这些库简化了Android应用程序与XMPP服务器的...
XMPP支持多种应用,包括聊天、文件传输、VoIP等。 接下来,我们将探讨如何在Android上实现XMPP即时通讯。这通常涉及到以下步骤: 1. **选择XMPP库**:在Android开发中,我们需要一个兼容Android平台的XMPP库。例如...
6. **扩展性**:XMPP协议支持众多扩展(XEPs),如多用户聊天室(MUC)、文件传输、VOIP等,可以根据应用需求选择实现。 7. **代码结构**:良好的代码组织可以提高可读性和可维护性。一般分为网络层(负责连接和...
XMPP(Extensible Messaging and Presence Protocol)是一种开放标准的协议,主要用于实时通讯和协作,包括聊天、文件传输、语音和视频通话等。它基于XML,提供了一个灵活的消息架构,使得开发者可以轻松地构建...
9. **扩展功能**:XMPP协议允许开发者添加自定义的扩展,如文件传输、VoIP等。asmack库提供了相应的API,使得这些功能的实现变得更加简单。 10. **性能优化和错误处理**:在实际应用中,需要考虑性能优化,如减少...
- 考虑添加更多功能,如文件传输、群组聊天、隐私设置等,以增强用户体验。 通过以上步骤,我们可以使用Qt和QXmpp库创建一个类似于psi的XMPP客户端。这个过程中,不仅需要理解XMPP协议的基本原理,还需要熟悉Qt的...
9. **优化与扩展**:根据实际需求,可能需要添加额外的功能,如群组聊天、文件传输、推送通知等。同时,对服务器进行优化,提高处理速度和内存使用效率。 10. **部署与运维**:编译成可执行文件后,将其部署到目标...
本文件主要关注的是如何在iOS平台上使用XMPP与ejabberd服务器进行集成,实现即时通讯功能。 ejabberd是一款开源的XMPP服务器,支持多种平台,包括iOS。它提供了强大的可扩展性和高可用性,能够处理大量的并发用户,...
10. **扩展功能**:XMPP协议允许扩展,因此客户端可能还包含了如文件传输、音视频通话等功能的实现。 通过研究这个开源项目,开发者可以学习到如何在Android环境中搭建XMPP客户端,理解XMPP协议的工作原理,以及...
4. **实时通信**:XMPP的核心是实时通信,包括一对一聊天、群聊、文件传输等。项目可能包含了如何发送、接收和处理各种类型的消息的代码。 5. **在线状态管理**:XMPP允许用户显示在线状态,如在线、离线、忙碌等。...