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

概述

一.种子解析模块的功能

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

二.模块内部函数实现

1.int read_metafile(char *metafile_name)

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

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

实现:

//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下载软件开发笔记——种子解析模块的设计与实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部