emule(电驴/电骡)源码分析

void CUpDownClient::ConnectionEstablished():

emule中, CUpDownClient 代表了一个peer。一个peer会被放置到各种队列中去。比如,还未连接的peer被放入到待连接队列中。其它队列中保存的是peer的指针,这样可以节省内存。

函数ConnectionEstablished()其意思很明显:连接建立后调用。

一个peer连接后,需要做什么呢?

1 从connecting队列中删除。

2 如果本emule还未获取到自己的公网IP,则通过这个peer获取自己的公网IP。

3 更新peer在kad网络中的状态。

4 如果正在与这个peer聊天,则更新这个peer的聊天状态。

5 更新download状态。 如果正等待从这个peer上download数据,则马是上向这个peer发出下载请求。

6 更新reask状态。暂时不知道reask是针对什么情况出现的。

7 更新upload状态。如果处于等待向这个peer上传数据的状态(收到了这个peer的下载请求,这个peer会位于上传队列中),则马上向这个peer 发出同意上传请求的回复。

8 如果先前向这个peer发出文件列表请求的命令(可能通过pop menu),则发出请求paket。

9 如果有很多paket待发给这个peer,则全部发出去。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
#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、付费专栏及课程。

余额充值