最新飞信协议聊天过程的完整描述
来源:互联网 发布:网络视频会议设备价格 编辑:程序博客网 时间:2024/04/30 10:12
2009年12月18日 00:30
作者:不得闲
前不久才发布了原来的飞信控件的源码!那个代码中无法接收到最新的飞信的聊天发送过来的消息,想着可能就是协议有变动,今天在外面逛了半圈回来之后,开始着手分析3.5.24的聊天过程,果不其然,有变动了,以前是直来直往的发送信息,现在的消息发送就有点麻烦了,居然额外用了专门的聊天服务器,发起新的聊天请求时会创建新的链接,然后链接到聊天服务器之后,开始你来我往的不断的验证与注册,完毕之后才会开始正式的聊天信息的发送,难怪以前的收不到了哪!现在,我将分析的完整过程给下,有爱好的人,可以自行根据本协议的信息做相应的变动,来完成我发布的那个控件还不能完成的功能:
发起聊天的方法:
1、
客户端(59.174.141.61:2708)------------ >>服务器(221.176.31.33:8080)
S fetion.com.cn SIP-C/2.0
F: 815389316
I: 19
Q: 1 S
N: StartChat
请求开始聊天会话的信息
客户端(59.174.141.61:2708) <<------------服务器(221.176.31.33:8080)
服务器返回:
SIP-C/2.0 200 OK
I: 19
Q: 1 S
A: CS
address="221.176.31.108:8080;221.176.31.108:443",credential="1279087023.1583835504"
可见,客户端请求成功!服务器端提供了221.176.31.108:8080;221.176.31.108:443可用
Credential为以后新建的Socket连接提供一个用于连接到服务器上的验证权值
于是客户端(59.174.141.61:2708)开始创建一个新的连接
我这里创建的这个心连接的端口为3401,也就是说新连接的地址为59.174.141.61:3401
于是进入第二个步骤
2、新连接连接到服务器,并且发送注册消息
客户端(59.174.141.61:3401)--------->>服务器(221.176.31.108:8080)
(注意一下这里的主机已经不是步骤1中的主机,客户机也不是步骤1中的客户机)
发送注册信息:
R fetion.com.cn SIP-C/2.0
F: 815389316
I: 1
Q: 0 R
A: TICKSauth="1279087023.1583835504"
K: text/html-fragment
K: multiparty
K: nudge
K: share-background
K: fetion-show
这里注意里面的A:TICKS auth="1279087023.1583835504",这个auth就是在第一步中获得的那个权值,提供用来登陆服务器验证
客户端(59.174.141.61:3401) <<----------服务器(221.176.31.108:8080)
SIP-C/2.0 200 OK
I: 1
Q: 0 R
XI: 0bb0982aafb546a8af92e8d66fbe962c
X: 1200
K: text/plain
K: text/html-fragment
K: multiparty
K: nudge
K: share-background
K: fetion-show
返回成功了,也就是上面的注册到聊天服务器成功,这里的K值,用来表示服务器能够接受的值类型方式(普通文本,html等)
进入步骤三:
发送InviteBuddy命令邀请好友开始会话
3,发送邀请
客户端(59.174.141.61:3401)---------- >>服务器(221.176.31.108:8080)
S fetion.com.cn SIP-C/2.0
F: 815389316
I: 2
Q: 0 S
N: InviteBuddy
L: 85
<args><contacts><contacturi="sip:818332893@fetion.com.cn;p=196"/></contacts></args>
发起聊天会话请求,来自于815389716,向sip:818332893@fetion.com.cn;p=196发送一个请求
客户端(59.174.141.61:3401) <<----------服务器(221.176.31.108:8080)
//发送请求成功
SIP-C/2.0 200 OK
I: 2
Q: 0 S
另一个客户端的验证请求
同时,服务器向sip:818332893@fetion.com.cn;p=196这个被815389316邀请要对话的用户,发送一个有用户向他对话的信息
客户端(59.174.141.61:3363) <<----------服务器(221.176.31.108:8080)
注意这个客户端是815389316要求对话的人的地址
I 818332893 SIP-C/2.0
F: sip: 815389316@fetion.com.cn;p=72
A: CSaddress="221.176.31.108:8080;221.176.31.108:443",credential="1279087023.1008491823"
I: -12
K: text/plain
K: text/html-fragment
K: multiparty
K: nudge
K: share-background
K: fetion-show
XI: 0bb0982aafb546a8af92e8d66fbe962c
L: 106
Q: 200002 I
AL: buddy
s=session
m=message
a=user:sip:815389316@fetion.com.cn;p=72
a=user:sip: 818332893@fetion.com.cn;p=196
A域中指定了聊天服务器的地址,以及登陆到聊天服务器的验证权值
K域指定了可接收的消息类型等
客户端(59.174.141.61:3363)-------- >>服务器(221.176.31.108:8080)
SIP-C/2.0 200 OK
F: sip:815389316@fetion.com.cn;p=72
I: 4
Q: 3 I
客户端反馈,同意与sip:815389316@fetion.com.cn;p=72对话
而后,客户端(59.174.141.61:3363)这个客户端开始创建一个新的Socket连接,然后用这个Socket连接到聊天服务器服务器(221.176.31.108:8080)
如新的Socket连接地址为:59.174.141.61:3403
之后,通以前那个一样
这个新连接注册到聊天服务器,发送注册请求信息
客户端(59.174.141.61:3403)-------- >>服务器(221.176.31.108:8080)
注意这里的客户端的地址已经是新Socket地址
R fetion.com.cn SIP-C/2.0
F: 818632893
I: 4
Q: 4 R
A: TICKSauth="1279087023.1008491823"
K: text/html-fragment
K: multiparty
K: nudge
K: share-background
K: fetion-show
服务器反馈
客户端(59.174.141.61:3403) <<--------服务器(221.176.31.108:8080)
SIP-C/2.0 200 OK
I: 4
Q: 4 R
XI: 0bb0982aafb546a8af92e8d66fbe962c
X: 1200
K: text/plain
K: text/html-fragment
K: multiparty
K: nudge
K: share-background
K: fetion-show
表示准备成功
然后服务器通知发起人sip:815389316@fetion.com.cn;p=72,他的请求方已经进入对话状态的信息:
客户端(59.174.141.61:3401) <<--------服务器(221.176.31.108:8080)
BN 815389716 SIP-C/2.0
I: 1
Q: 2 BN
N: Conversation
L: 100
<events><eventtype="UserEntered"><member
uri="sip:818632893@fetion.com.cn;p=196"/></event></events>
同时也向被请求方发送一条类似的信息
BN 818632893 SIP-C/2.0
I: 4
Q: 2 BN
N: Conversation
L: 99
<events><eventtype="UserEntered"><member
uri="sip:815389716@fetion.com.cn;p=72"/></event></events>
此时,一个完整的会话准备过程完成,以下开始对话过程
//发起人发送
客户端(59.174.141.61:3401)------ >>服务器(221.176.31.108:8080)
M fetion.com.cn SIP-C/2.0
F: 815389716
I: 3
Q: 0 M
C: text/html-fragment
K: SaveHistory
L: 60
<Font Face='宋体' Color='-16777216'Size='10.5'>767</Font>
//客户端转发到接收方
客户端(59.174.141.61:3403) <<------服务器(221.176.31.108:8080)
M 818632893 SIP-C/2.0
I: 4
Q: 3 M
F: sip:815389716@fetion.com.cn;p=72
C: text/html-fragment
K: SaveHistory
L: 60
D: Thu, 17 Dec 2009 16:13:57 GMT
XI: 345bc93d43884da5bc0365a48c91d3e1
<Font Face='宋体' Color='-16777216'Size='10.5'>767</Font>
接收方接收到消息之后,反馈一个成功信息给服务器
客户端(59.174.141.61:3403)------ >>服务器(221.176.31.108:8080)
SIP-C/2.0 200 OK
F: sip:815389716@fetion.com.cn;p=72
I: 4
Q: 3 M
然后服务器将本次的通信成功与否的信息转给发话人
客户端(59.174.141.61:3403) <<------服务器(221.176.31.108:8080)
SIP-C/2.0 200 OK
I: 3
Q: 0 M
D: Thu, 17 Dec 2009 16:13:57 GMT
XI: 345bc93d43884da5bc0365a48c91d3e1
此致一个完整的聊天会话过程完成
全部分析完毕,睡觉!
- 最新飞信协议聊天过程的完整描述
- 飞信分析之五:用即时消息聊天时的协议交互过程
- 详细描述一次最新Heroku部署python web项目的完整过程
- iOS 微信支付接入最新的完整流程
- TR-069 协议完整的通信过程
- TR-069 协议完整的通信过程
- NetWork——描述一次完整的网络请求过程
- NetWork——描述一次完整的网络请求过程
- HTTP协议 : 协议的完整的通信过程
- 记一次导入环信聊天demo的过程
- HTTPS协议与SSL协议的完整交互过程
- HTTP协议及过程描述
- HTTP协议及过程描述
- HTTP协议及过程描述
- 描述TCP 协议三次握手,四次释放的过程
- 一个完整的聊天程序
- 一个完整的聊天程序
- 聊天功能的完整实现
- 第一篇
- 国外教育技术期刊
- VC写一个荣光医院修补弹坑游戏助手
- uC/OS-II如何使任务在就绪表中进入就绪态与退出就绪态
- sap小白兔的开篇之作。
- 最新飞信协议聊天过程的完整描述
- 支持输入法变更事件的InputPanel
- 【转】俞敏洪老师的浙大演讲
- 基于1553B总线的ARINC 661指令传输方式的设计
- 如何设置超级终端中字符的颜色?
- jsp分页技术
- Tips: Disk Performance On FreeBSD
- J2EE 常见回答 Jsp方面
- 提升JSP应用程序的七大绝招