上一篇博客已经介绍eMule客户端的初始化过程及相关代码梳理,这里将接着介绍第二个步骤 连接到ed2k服务器
Emule 客户端使用场景分析,当我们要下载一个ed2k 文件时 ,可以分为以下几步:
一 。启动emule客户端(这时候就开始初始化,主要是对Config文件夹下的文件(比如Server.met等)进行反序列化,生成相应实例,存储信息(包括ed2k服务器地址及端口号),相关博客)。
二. 客户端必须连上某个服务器(可能会从服务器列表中依次尝试,直到连上为止,连上以后客户端就加入了emule网络,成为协议节点)。
三. 用户就向服务器传递ed2k连接(这是用户已知道ed2k连接的情况,如果用户不知道ed2k连接,就可向服务器发送关键词,服务器会返回很多链接,这时再提交连接就一样的过程了)。
四. 提交ed2k连接以后,就表示用户要下载文件,服务器就返回存储文件的文件源客户端。
五. 用户得到文件源客户端的信息后,就发起到某个源客户端的回话;
六. 原客户端收到会话请求后就排队等待上传文件(排队的是请求发起客户端);
七. 原客户端选择用户客户端,开始上传;
八. 用户客户端从原客户端下载文件数据库块。
九. 结束下载完成会话(用户客户端)。
十. 源文件客户端从队列中选择一个等待客户端,进行数据传送。
上一篇博客中,得到了服务器列表这里就开始连接服务器(这里会涉及到一些概念,例如客户端id,扩展协议,若不清楚的请看另一篇博客,描述了相关概念,),还得提前说明,这里的连接不仅是数据可以发过去(可以相互交换数据),而是连接到ed2k网络(在交换信息的基础上还得登陆成功),在准备建立与服务器的连接时,客户端会尝试并行地连接到几个服务器,根据成功的登陆顺序放弃其他的。
有下面几个可能的连接建立个案:
1、高ID连接-服务器分配一个高ID给正在连接的客户端
2、低ID连接-服务器分配一个低ID给正在连接的客户端
3、拒绝会话-服务器拒绝客户端