最近看 Emule协议有个不明白的地方,就是关于客户端文件请求的,规范中是这么写的:
6.4.14文件请求
从向其他客户端请求文件的客户端发送该消息。这个消息包含请求文件的ID和状态字段描
述了,哪个块准备下载。
块状态字段
eMule允许客户端从其它客户端中下载文件块,甚至当提供的客户端还没有完全下载这个请
求的文件。块状态字段帮助区分一个只是不在被请求的客户端上的文件和一个只有部分被下
载的文件。如果,文件不存在,则块字段值为0。如果文件是部分的下载,则头2字节是整数,
给出已经下载的块的数量,而最后字节是位向量,指示哪个文件是完全下载的(通过设置机
器位为1)。
名称 字节大小 默认值 注释
Protocol 1 0xE3
Size 4 消息大小是以字节为单位,不包括头部和大小的域
Type 1 0x58 OP_FILEREQUSET操作码的值
FileID 16 NA 惟一的文件ID
PartStatus 3 NA 可选的,如果eMule信息中的扩展请求版本指示消息大于0,则发送。文件 签名在本章中介绍
Sourcecount 2 NA 可选的,如果eMule信息中的扩展请求版本指示消息大于1,则发送。指示 这个文
我的疑惑在于
1。既然消息包含哪个块准备下载,那么应该对应PartStatus,而如果文件是部分的下载,则头2字节是整数,那么只剩下1字节(8位)来表示要下载的块,对于块数很多的文件明显8位无法表示嘛。
2。对应文件请求回应,是否里面也会有自己块的下载完成情况的信息?如果没有的话,如何让对方得知自己已下载完成的块?



















