资源简介
自行编写的全套BT源代码,C++编写,完全实现BT的功能,并且经过了大量和长期的实际应用。是可以提供正常商业服务的基础P2P文件共享软件。
代码片段和文件信息
// Bdecode.cpp: implementation of the CBdecode class.
//
//////////////////////////////////////////////////////////////////////
#include “stdafx.h“
#include “testBT.h“
#include “Bdecode.h“
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CBdecode::CBdecode()
{
m_lsize = 0;
m_pBuf = 0;
}
CBdecode::~CBdecode()
{
}
CVal* CBdecode::decode_int(long &lPos)
{
//*
long lOldPos = lPos;
for (; lPos {
if (m_pBuf[lPos] == ‘e‘)
{
lPos ++;
break;
}
}
if (lPos > m_lsize)
return 0;
char* pstrStop = 0;
long l = strtol(m_pBuf+lOldPos &pstrStop 10);
if (pstrStop[0] != ‘e‘)
return 0;
return new CVal(l);
}
CVal* CBdecode::decode_string(long &lPos)
{
long lOldPos = lPos;
for (; lPos {
if (m_pBuf[lPos] == ‘:‘)
{
lPos ++;
break;
}
}
if (lPos > m_lsize)
return 0;
char* pstrStop = 0;
long len = strtol(m_pBuf+lOldPos &pstrStop 10);
if (pstrStop[0] != ‘:‘)
return 0;
if ((lPos+len) > m_lsize)
return 0;
CVal* pVal = new CVal(m_pBuf+lPos len);
lPos += len;
return pVal;
}
void ClearList(VALLIST* pls)
{
VALLIST::iterator iter = pls->begin();
while(iter != pls->end())
{
delete *iter;
iter++;
}
}
CVal* CBdecode::decode_list(long &lPos)
{
VALLIST* ls = new VALLIST();
for (; lPos {
if (m_pBuf[lPos] == ‘e‘)
{
lPos++;
break;
}
CVal* pRet = bdecode_rec(lPos);
if (!pRet)
{
ClearList(ls);
delete ls;
return 0;
}
ls->push_back(pRet);
}
if (lPos > m_lsize)
{
ClearList(ls);
delete ls;
return 0;
}
return new CVal(ls);
}
void ClearMap(VALMAP* pmap)
{
VALMAP::iterator iter = pmap->begin();
while(iter != pmap->end())
{
delete (*iter).second;
iter++;
}
}
CVal* CBdecode::decode_dict(long& lPos)
{
VALMAP* pmap = new VALMAP();
string strLast;
for (; lPos {
if (m_pBuf[lPos] == ‘e‘)
{
lPos++;
break;
}
CVal* pRet = decode_string(lPos);
if (!pRet)
{
ClearMap(pmap);
delete pmap;
return 0;
}
string strCur = pRet->pstrVal;
delete pRet;
if (strLast.size() > 0)
{
if (strCur <= strLast)
{
ClearMap(pmap);
delete pmap;
return 0;
}
}
strLast = strCur;
CVal* pRetVal = bdecode_rec(lPos);
if (!pRetVal)
{
ClearMap(pmap);
delete pmap;
return 0;
}
(*pmap)[strLast] = pRetVal;
}
if (lPos > m_lsize)
{
ClearMap(pmap);
delete pmap;
return 0;
}
return new CVal(pmap);
}
CVal* CBdecode::bdecode_rec(long& lPos)
{
CVal* pRet = 0;
char t = m_pBuf[lPos];
switch (t)
{
case ‘i‘:
return
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2004-02-27 14:59 GGBT
文件 33490 2003-09-25 23:04 GGBT\sizecbar.cpp
文件 4835 2003-08-02 23:00 GGBT\ctrlext.h
文件 2747 2003-08-02 22:55 GGBT\ctrlext.cpp
文件 8432 1980-04-26 13:45 GGBT\ctrlext.inl
文件 24093 2004-02-27 15:04 GGBT\testBT.clw
文件 13995 2004-02-27 15:21 GGBT\testBT.plg
文件 49968 2003-10-29 10:48 GGBT\testBT.rc
文件 18224 2003-10-29 17:45 GGBT\testBT.dsp
文件 6335 2003-09-25 23:04 GGBT\sizecbar.h
文件 1544 2003-09-22 01:46 GGBT\Downloader.h
文件 705 2003-08-03 02:21 GGBT\BTFormat.h
文件 2011 2003-09-29 10:56 GGBT\Connection.h
文件 2347 2003-10-12 11:23 GGBT\testBT.h
文件 522 2003-08-02 23:00 GGBT\Parseargs.h
文件 4969 2003-08-24 02:16 GGBT\Choker.cpp
文件 749952 2003-09-25 15:46 GGBT\ip.dat
文件 1013 2003-08-02 22:55 GGBT\Common.cpp
文件 1428 2003-10-06 18:44 GGBT\StdAfx.h
文件 1415 2003-09-28 01:05 GGBT\MonitorBar.h
文件 537 2003-09-19 11:36 GGBT\testBT.dsw
文件 900 2003-08-02 23:00 GGBT\SortClass.h
文件 2694 2003-10-06 13:05 GGBT\MenuSpawn.h
文件 2195 2003-09-29 01:43 GGBT\testBTDoc.h
文件 3661 2003-10-11 02:01 GGBT\Download.h
文件 4229 2004-02-27 15:13 GGBT\IPLocater.cpp
文件 783 2003-08-02 23:00 GGBT\Measure.h
文件 2985 2003-10-12 13:59 GGBT\ButtonEx.h
文件 4203 2003-10-07 23:37 GGBT\ExpandingDialog.cpp
文件 212 2003-08-02 22:55 GGBT\StdAfx.cpp
............此处省略193个文件信息
相关资源
- VC++基于OpenGL模拟的一个3维空间模型
- 基于VC++的SolidWorks二次开发SolidWorks
- GBT 28169-2011 嵌入式软件 C语言编码规范
- 派克变换VC++源码(附文档)
- VC++ 串口
- VC++ 大富翁4_大富翁游戏源码
- VC++ 摄像头视频采集与回放源程序
- 转 VC++ 实现电子邮件(Email)发送
- 基于MFC的VC++仿QQ浏览器源码(雏形)
- VC++ 服务程序编写及安装与卸载
- VC++6.0番茄西红柿VAXvirsual assist X完美破
- 基于改进的fcm算法的图像分割vc++
- VC++6.0 绿色版,免安装,非常好用。
- Microsoft Visual C++ 2005 Redistributable Pack
- VC++MFC课程设计的学生成绩管理系统
- 大智慧365DLL插件设计
- VC++6.0汉化包
- VC++完整商业界面源码(再上传)
- VC++编程技术600个大型项目源码.rar
- VC++实现RSA加密算法
- VC++ 中国象棋经典游戏源代码
- 郁金香VC++游戏辅助视频教程
- C语言进阶源码---基于graphics实现图书
- 摄影测量相对定向VC++程序
- VC++数字图像处理典型算法及实现
- VC++酒店客房管理系统 MFC
- 车站计算机联锁vc++6.0程序代码
- VC++编程的第一个MFC工程Hello World
- VC++中实现复选下拉框CCheckComboBox
- VC++写的SMTP协议发附件超酷啊直接可以
评论
共有 条评论