XMPP协议之Socket5 Bytestream文件传输

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就可以进行文件传输了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值