XMPP file Transfer (转)
来源:互联网 发布:mac如何下载千牛 编辑:程序博客网 时间:2024/05/30 07:13
SOCK5流协商的建立一部分通过XMPP XML流,一部分通过一个独立的socket
实际的文件传输发生在创建的socket上。
第一步:
[发送端] 发送SI(流协商)包A
A:
<iq type='set' id='gaim8215f9ef' to='test@dd.antkingdom.com/Exodus'>
<si xmlns='http://jabber.org/protocol/si' id='gaim8215f9f0' profile='http://jabber.org/protocol/si/profile/file-transfer'>
<file xmlns='http://jabber.org/protocol/si/profile/file-transfer' name='backup.txt' size='2043'/>
<feature xmlns='http://jabber.org/protocol/feature-neg'>
<x xmlns='jabber:x:data' type='form'><field var='stream-method' type='list-single'>
<option><value>http://jabber.org/protocol/bytestreams</value></option>
</field>
</x>
</feature>
</si>
</iq>
[接收端] 接收A: 发送SI响应包B
B:
<iq id="gaim8215f9ef" to="jjl@dd.antkingdom.com/Home" type="result">
<si id="gaim8215f9f0" xmlns="http://jabber.org/protocol/si">
<feature xmlns="http://jabber.org/protocol/feature-neg">
<x type="submit" xmlns="jabber:x:data">
<field var="stream-method"><value>http://jabber.org/protocol/bytestreams</value></field>
</x>
</feature>
</si>
</iq>
第二步:
[发送端] 接收B
创建socket,绑定一个地址,并监听(记下IP与端口号),等待连接
构造出如下的bytestream包C,发送包C
C:
<iq type='set' id='gaim8215f9f1' to='test@dd.antkingdom.com/Exodus'>
<query xmlns='http://jabber.org/protocol/bytestreams' sid='gaim8215f9f0'>
<streamhost jid='jjl@dd.antkingdom.com/Home' host='192.168.100.1' port='6642'/>
</query>
</iq>
[接收端] 接收C:
创建一个socket, connect C包中指定的host与port
开始socket 5协商
socket 5协商完毕,发送bytestream响应包D
D:
<iq from='test@dd.antkingdom.com/Exodus' type='result'to='jjl@dd.antkingdom.com/Home' id='gaim8215f9f1'>
<query xmlns='http://jabber.org/protocol/bytestreams' sid='gaim8215f9f0'>
<streamhost-used jid='jjl@dd.antkingdom.com/Home'/>
</query>
</iq>
第三步:
[发送端] 接收D
开始文件传输
Socket 5协商过程
一、[接收端]发送5,1,0
二、[发送端]接收到5,1,0,发送5,0
三、[接收端]接收到5,0,发送5,1,0,3+digest长度+0+0
注:digest是通过sessionID, 流发起者,流接收者,通过哈希算法得到的一个字符串
四、[发送端]接收到5,1,0,3+digest长度+0+0,发送5,0,0,3+digest长度+0+0
五、socket 协商完毕,建立了P2P的连接,下面通过这个连接的socket就可以进行文件传输了。
- XMPP file Transfer (转)
- File Transfer(25 分)
- File Transfer
- File Transfer
- File Transfer
- File Transfer
- File Transfer
- 文件传输协议(File Transfer Protocol, FTP)
- 文件传输协议(File Transfer Protocol, FTP)
- 文件传输协议(File Transfer Protocol, FTP)
- 文件传输协议(File Transfer Protocol, FTP)
- 文件传输协议(File Transfer Protocol, FTP)
- 文件传输协议(File Transfer Protocol, FTP)
- 7-26 File Transfer(25 分)
- RFC959 - File Transfer Protocol
- Android file transfer/Upload
- FTP, File Transfer Protocol
- File-transfer-via-DNS
- 单点登录、统一认证
- Grails 中iframe 页面无法正常显示
- JetBrains ReSharper 6.0 注册码
- ubuntu查看文件大小
- android stk 服务解析
- XMPP file Transfer (转)
- 启动hadoop集群
- RichEdit超链接
- Eclipse 设置全局 utf-8 . 导出doc的设置
- 解决2011年及之后Oracle 10G EM无法启动问题
- 33个c#编程技巧
- 如何识别 SQL Server 的版本
- 3D Engine 的设计架构
- 在Quartus II中快速更新FPGA片上存储器初始值的一种方法