eMule协议专题
客户端服务器TCP连接
每个客户端用TCP连接一个服务器。服务器给客户端分配一个ID,用于在会话中唯一标识这个客户端(高ID总是跟据它的ID地址来分配)。电骡客户端需要一个服务器连接才能操作。客户端不能连接到多个服务器,没有用户干预情况下客户端不能动态改变服务器。连接建立
客户端创建连接的时候,可能会同时连接到多个服务器,仅仅使用成功的登陆流程,其他的连接直接放弃。
- 高ID??服务器分配一个高ID给客户端。
- 低ID??服务器分配一个低ID给客户端。
- 拒绝??服务器拒绝客户端的连接。
当然不用说,还有服务器死机和无法连接的情况。
高ID登陆流程

高ID登录流程
上图描述了高ID登录的消息交换流程。在这种情况下,客户端创建一个到服务器的连接,传送他的登录消息给服务器。服务器用另外的TCP连接去 连接客户端,进行一次客户端到客户端的握手,用来确认客户端有能力接受其他的电骡客户端的连接。在完成了客户端到客户端握手之后,服务器关闭第二个连接, 并发给客户端他的ID作为客户端服务器握手的终结。 你可能注意到上图中的eMule info是灰色的。这是因为这个消息属于eMule协议的扩展。 低ID登陆流程

低ID登录流程
上图描述了产生低ID连接的流程。在这种情况下,服务器无法连接到客户端(客户端到客户端的握手),所以给客户端分配了一个低ID。通常服务器消息会包括 这样的一个警告“Warning [server details] - You have a lowid. Please review your network config and/or your settings.”。不管高ID还是低ID,握手都是由id change消息结束的,这个消息给客户端在下面的跟服务器的会话提供了一个客户端ID。
登录被拒绝流程

登录被拒绝流程
上图描述了登录被拒绝的流程。当客户端是低ID或者服务器已经到达了硬件能力极限,服务器都有可能拒绝登录。服务器消息里面会包含拒绝理由的简单描述。
连接开始的信息交换

客户端和服务器成功建立连接之后会交换一些设置消息。这些消息的用途是更新两端的状态信息。客户端首先把它的共享文件列表发送给服务器,然后它要求更新它 的服务器列表。服务器发送它的状态和版本,然后发送它知道的eMule服务器列表,并提供一些自识别的细节。最后客户端询问源(可以用来下载它的下载文件 列表中的文件的客户端),服务器返回一系列消息,知道所有的源列表都被客户端得到为止。
文件搜索

回调机制



请不要吝惜您的评论,每一条评论,都是我在漫漫长夜前行的力量
5 条评论:
"服务器用另外的TCP连接去 连接客户端,进行一次客户端到客户端的握手,用来确认客户端有能力接受其他的电骡客户端的连接。在完成了客户端到客户端握手之后,服务器关闭第二个连接,"怎么两次出现了客户端到客户端的握手,你提到了么,怎么回事?
12:15 上午
回调机制中,低ID之间如何通过server实现通信?
2:15 下午
不错!好贴
11:28 上午
请说明一下关于容错机制的问题?为什么有的客户端发到网上的文件段总是错误?
4:31 上午
像这种软件的断点续传是怎么做的?
4:53 下午
发表评论
<< 主页