ProgSoft

A pessimist sees the difficulty in every opportunity; an optimist sees the opportunity in every diff...

MSNP10协议分析 04.Session [by progsoft]

在MSN里发信息(发文件,视频聊天等)都是建立在Session的,所以我们必须建立Session连接,否则我们是不能发送/接收信息的。

我们有两个途径可以创建Session连接:
一、用户主动向另外用户发送Session请求
二、用户接受另外用户发送的Session请求

接下来我分别介绍这两种途径,一、用户主动向另外用户发送Session请求,先我还是给出一个成功的案例

<NS Connect>
>>>  XFR 10 SB/r/n
<<<  XFR 10 SB 207.46.108.53:1863 CKI 17220274.1093571988.7262/r/n
</NS Connect>

<SS Connect 207.46.108.53:1863>
>>>  USR 1 example@hotmail.com 17220274.1093571988.7262/r/n
<<<  USR 1 OK example@hotmail.com usernick/r/n

>>>  CAL 2 user01@hotmail.com/r/n
<<<  CAL 2 RINGING 17220274/r/n
<<<  JOI user01@hotmail.com user01_nickname/r/n

到这里我们可以看到自己(example@hotmail.com)和另外一个用户(user01@hotmail.com)已经成功连接到同一个Session了,离发送消息只有一步了。

下面详细解释一下
第一步是请求Session服务器地址
客户端发送>>>  XFR 10 SB/r/n
语法结构:
XFR<SP>TrID<SP>SB<CRLF>
表示告诉DS服务器,客户端需要建立Session连接,请给连接地址和Session串
服务器回应<<<  XFR 10 SB 207.46.108.53:1863 CKI 17220274.1093571988.7262/r/n
语法结构:
XFR<SP>TrID<SP>SB<SP>IP:PORT<SP>CKI<SP>Session串<CRLF>
表示请求的SS服务器为IP:PORT,连接串为Session串

第二步是连接SS服务器
<SS Connect 207.46.108.53:1863>

第三步是发送连接Session请求
客户端发送>>>  USR 1 example@hotmail.com 17220274.1093571988.7262/r/n
语法结构:
USR<SP>TrID<SP>用户passport<SP>Session串<CRLF>
表示用户(example@hotmail.com)要连接Session,Session串即刚才请求DS服务器给的Session串
服务器回应<<<  USR 1 OK example@hotmail.com usernick/r/n
语法结构:
USR<SP>TrID<SP>OK<SP>用户passport<SP>用户呢称<CRLF>
表示用户(example@hotmail.com)已经连接Session成功

第四步就是邀请聊天用户进入Session
客户端发送>>>  CAL 2 user01@hotmail.com/r/n
语法结构:
CAL<SP>TrID<SP>用户passport<CRLF>
表示邀请用户(user01@hotmail.com)连接Session
服务器回应<<<  CAL 2 RINGING 17220274/r/n
语法结构:
CAL<SP>TrID<SP>RINGING<SP>Session1<CRLF>
表示邀请用户(user01@hotmail.com)的请求以被服务器接受
Session1表示Session串的第一部分
服务器回应<<<  JOI user01@hotmail.com user01_nickname/r/n
语法结构:
语法结构:
JOI<SP>用户passport<SP>用户呢称<CRLF>
表示用户(user01@hotmail.com)已经连接Session成功

这样就可以开始我们信息发送和接受了。

注意:第三、四步和后面发送/接受信息是在SS服务器的,同时DS服务器连接一直要保持,否则我们将会登出。


接下来我再介绍第二个途径,二、用户接受另外用户发送的Session请求,同样还是给出一个成功的案例
<NS Connect>
<<<  RNG 465209 207.46.108.93:1863 CKI 1093597464.30080 user01@hotmail.com user01_nickname/r/n
</NS Connect>

<SS Connect 207.46.108.93:1863>
>>>  ANS 1 example@hotmail.com 1093597464.30080 465209/r/n
<<<  IRO 1 1 2 user01@hotmail.com user01_usernick/r/n
<<<  IRO 1 2 2 user02@hotmail.com user02_usernick/r/n
<<<  ANS 1 OK/r/n

下面详细解释一下:

第一步获得Session连接邀请
这一步是被动获得,只有等待DS服务器发送邀请,所以只有服务器回应
服务器回应<<<  RNG 465209 207.46.108.93:1863 CKI 1093597464.30080 user01@hotmail.com user01_nickname/r/n
语法结构:
RNG<SP>Session串1<SP>IP:PORT<SP>CKI<SP>Session串2<SP>用户passport<SP>用户呢称<CRLF>
RNG表示Session请求
Session串1和Session串2,为Session通行证,连接Session用
用户passport和用户呢称表示邀请的用户帐户和呢称

第二步是连接SS服务器
<SS Connect 207.46.108.93:1863>

第三步是回应连接Session请求
客户端发送>>>  ANS 1 example@hotmail.com 1093597464.30080 465209/r/n
语法结构:
ANS<SP>TrID<SP>用户passport<SP>Session串2<SP>Session串1<CRLF>
表示用户(example@hotmail.com)同意连接Session,Session串1和Session串2即刚才请求DS服务器给的Session串
服务器回应<<<  IRO 1 1 2 user01@hotmail.com user01_usernick/r/n
服务器回应<<<  IRO 1 2 2 user02@hotmail.com user02_usernick/r/n
语法结构:
IRO<SP>TrID<SP>会话序号<SP>会话总数<SP>用户passport<SP>用户呢称<CRLF>
表示已经在会话中的用户信息反馈
会话序号,表示已有用户在该会话中的序号
会话总数,表示该会话中,已经存在的用户总数(不包括自己)
用户passport和用户呢称,表示在会话的用户帐户和呢称
服务器回应<<<  ANS 1 OK/r/n
语法结构:
ANS<SP>TrID<SP>OK<CRLF>
表示用户(example@hotmail.com)已经连接该Session成功

这样也就可以开始我们信息发送和接受了。

注意:第三步和后面发送/接受信息是在SS服务器的,同时DS服务器连接一直要保持,否则我们将会登出。

阅读更多
个人分类: MSN
想对作者说点什么? 我来说一句

MSN Messenger协议

2009年01月14日 111KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭