与Tracker交互
完成解析种子文件并从中获取Tracker服务器的URL后,即可开始与Tracker进行交互。交互有2个目的:
- 将自己的下载进度告知给Tracker以便Tracker进行一些相关统计;
- 获取当前下载同一个共享文件的peer的IP地址和端口号。
客户端使用HTTP协议与Tracker通信。通过HTTP GET方法从Tracker获取请求,请求的构成为Tracker的URL后面跟一个?以及参数和值对。如http://tk.greedland.net/announce?param1=value1¶m2=value2。
在客户端发往Tracker的GET请求中,包含以下参数:
参数 | 含义 |
---|---|
info_hash | 与种子文件中info关键字对应的hash值(通过Sha1算法计算),其固定长度为20字节 |
peer_id | 客户端用于标识自己的标识符,随机方式生成的也是20字节hash值 |
port | 监听端口号,用于接收其他peer的连接请求 |
uploaded | 当前总的上传量(字节数) |
downloaded | 当前总的下载量(字节数) |
left | 还剩多少字节需要下载 |
compact | 通知服务器以何种方式返回peer,为1时,每个peer占6个字节,前4个字节为peer的IP地址,后2个为端口号 |
event | 取值为started、cmpleted、stopped之一。 客户端第一次与Tracker通信时,该值为started; 下载完成后,为completed; 客户端即将关闭时,为stopped。 |
Tracker服务器的返回信息是一个经过B编码的字典。包含如下关键字: