eMule 的使用场景及初始化任务描述级eMule相关代码分析(仅涉及ed2k)

提前说明:从这页博客开始就会涉及eMule源代码的分析(或者说梳理更为合适),梳理源代码的目的在于让大家在看了一下原理后,想看下这些原理的具体实现(看eMule源代码)时轻松些,更有目标。所以在这里笔者也上传了eMule官方源码   http://download.csdn.net/detail/huang_rong12/9506732  ,若梳理的不好请见谅。

 

前面 已经介绍了ed2k的相关概念 ,本博客会先描述emule客户端使用场景,然后按照使用场景逐步进行分析。

 

Emule 客户端使用场景分析,当我们要下载一个ed2k 文件时 ,可以分为以下几步:

一 、启动emule客户端(这时候就开始初始化,主要是对Config文件夹下的文件(比如Server.met等)进行反序列化,生成相应实例,存储信息(包括ed2k服务器地址及端口号))。

二. 客户端必须连上某个服务器(可能会从服务器列表中依次尝试,直到连上为止,连上以后客户端就加入了emule网络,成为协议节点)。

三. 用户就向服务器传递ed2k连接(这是用户已知道ed2k连接的情况,如果用户不知道ed2k连接,就可向服务器发送关键词,服务器会返回很多链接,这时再提交连接就一样的过程了)。

四. 提交ed2k连接以后,就表示用户要下载文件,服务器就返回存储文件的文件源客户端。

五. 用户得到文件源客户

#define OP_EDONKEYHEADER 0xE3 #define OP_KADEMLIAHEADER 0xE4 这是他的协议码,他大部分的通信包第一个字节都是OP_EDONKEYHEADER 0xE3, 这是他的客户端之间的协议 #define OP_HELLO 0x01 // 0x10<HASH 16><ID 4><PORT 2><1 Tag_set> #define OP_SENDINGPART 0x46 // <HASH 16><von 4><bis 4><Daten len:(von-bis)> #define OP_REQUESTPARTS 0x47 // <HASH 16><von[3] 4*3><bis[3] 4*3> #define OP_FILEREQANSNOFIL 0x48 // <HASH 16> #define OP_END_OF_DOWNLOAD 0x49 // <HASH 16> #define OP_ASKSHAREDFILES 0x4A // (null) #define OP_ASKSHAREDFILESANSWER 0x4B // <count 4>(<HASH 16><ID 4><PORT 2><1 Tag_set>)[count] #define OP_HELLOANSWER 0x4C // <HASH 16><ID 4><PORT 2><1 Tag_set><SERVER_IP 4><SERVER_PORT 2> #define OP_CHANGE_CLIENT_ID 0x4D // <ID_old 4><ID_new 4> #define OP_MESSAGE 0x4E // <len 2><Message len> #define OP_SETREQFILEID 0x4F // <HASH 16> #define OP_FILESTATUS 0x50 // <HASH 16><count 2><status(bit array) len:((count+7)/8)> #define OP_HASHSETREQUEST 0x51 // <HASH 16> #define OP_HASHSETANSWER 0x52 // <count 2><HASH[count] 16*count> #define OP_STARTUPLOADREQ 0x54 // <HASH 16> #define OP_ACCEPTUPLOADREQ 0x55 // (null) #define OP_CANCELTRANSFER 0x56 // (null) #define OP_OUTOFPARTREQS 0x57 // (null) #define OP_REQUESTFILENAME 0x58 // <HASH 16> (more correctly file_name_request) #define OP_REQFILENAMEANSWER 0x59 // <HASH 16><len 4><NAME len> #define OP_CHANGE_SLOT 0x5B // <HASH 16> #define OP_QUEUERANK 0x5C // <wert 4> (slot index of the request) #define OP_ASKSHAREDDIRS 0x5D // (null) #define OP_ASKSHAREDFILESDIR 0x5E // <len 2><Directory len> #define OP_ASKSHAREDDIRSANS 0x5F // <count 4>(<len 2><Directory len>)[count] #define OP_ASKSHAREDFILESDIRANS 0x60 // <len 2><Directory len><count 4>(<HASH 16><ID 4><PORT 2><1 Tag_set>)[count] #define OP_ASKSHAREDDENIEDANS 0x61 // (null) 这是他的客户端到服务器的通信协议
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值