我是靠谱客的博主 暴躁鞋子,这篇文章主要介绍BT下载软件开发笔记——种子解析模块的设计与实现,现在分享给大家,希望可以做个参考。

一.种子解析模块的功能

负责解析种子文件,从中获取Tracker服务器的地址,待下载文件的文件名和长度,piece长度。各个piece的hash值。

二.模块内部函数实现

1.int read_metafile(char *metafile_name)

–功能–:将metafile中的内容读入metafile_content缓冲区,后续方便处理
–参数–:metafile_name为种子文件名
–返回值–:成功返回0,否则返回1

某些说明:
种子以二进制方式打开,(种子文件可能出现piece的hash值为0x00,若以字符形式打开,遇到该字符,库函数将认为读取文件结束)

实现:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
//read the metafile's content to metafile_content int ParseMetafile::read_metafile(char *metafile_name) { long i; //open file by binary, real only FILE *fp = fopen(metafile_name, "rb"); if(NULL == fp) { printf("%s:%d can not open filen", __FILE__, __LINE__); return -1; } // get metafile's length fseek(fp, 0, SEEK_END); filesize = ftell(fp); if(filesize == -1) { printf("%s:%d fseek failedn", __FILE__, __LINE__); return -1; } // read content to metafile_content char buffer[filesize + 1]; bzero(buffer, filesize + 1); fseek(fp, 0, SEEK_SET); for(i = 0; i < filesize; ++i) buffer[i] = fgetc(fp); buffer[i] = ''; metafile_content = shared_ptr<string> (new string(buffer)); #if __DEBUG__ cout<<"metafile_content: "<<*metafile_content<<endl; #endif // close file fclose(fp); return 0; }

持续更新中…

最后

以上就是暴躁鞋子最近收集整理的关于BT下载软件开发笔记——种子解析模块的设计与实现的全部内容,更多相关BT下载软件开发笔记——种子解析模块内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部