兼容BT协议内核库API开发手册_第1页
兼容BT协议内核库API开发手册_第2页
兼容BT协议内核库API开发手册_第3页
兼容BT协议内核库API开发手册_第4页
兼容BT协议内核库API开发手册_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

FTKernelAPI兼容BT协议内核库API开发手册参数说明版本V1.2最后修改日期2006-9-9版权北京惠软畅联网络技术有限公司网址http://技术支持电话(010)-62984271技术支持MSNFlashBT@H常见问题解答:http:///chs/faqs.html

文档摘要《FTKernelAPI兼容BT协议内核库API开发手册》是FTKernelAPI兼容BT协议内核库的API的简介和使用说明。介绍了FTKernelAPI的主要功能,特点,性能,并且对于具体的API接口进行了详细的说明和示例。目录1范围 11.1手册概述 11.2支持的开发语言环境 12总体框架概述 12.1基本应用 12.2API接口功能划分 12.3功能调用流程 42.4内核库的详细功能列表 52.5内核库的性能描述 52.6SeedClient(做种服务器)和UserClient(客户端) 62.7关于内核的线程 63开发语言环境的注意事项 63.1VC++6.0/7.0 63.2VB6.0/7.0 63.3Delphi7.0 63.4C++Builder 63.5C# 64概念说明和数据结构定义 74.1概念说明 74.2数据结构定义 95配置文件API接口 125.1具体函数说明 12FTK_Config_Open创建一个新的配置文件句柄 12FTK_Config_Close销毁一个存在的配置文件句柄 12FTK_Config_SetStr设置字符串选项 12FTK_Config_SetInt设置整型值选项 13FTK_Config_SetFloat设置浮点型选项 136全局环境API接口 146.1具体函数接口说明 14FTK_Context_Init环境初始化 14FTK_Context_Init2环境初始化 14FTK_Context_NotifyCB设置被动通知的回调函数 15FTK_Context_Release释放整个环境 15FTK_Context_Run整个环境的事件驱动引擎 16FTK_Context_Stop强迫退出环境,停止运行 16FTK_Context_ReBindListenPort重新根据配置文件绑定端口 16FTK_Context_IsInit判断是否已经初始化 16FTK_Context_IsRunning判断是否正在运行 16FTK_Context_GetThreadID获取线程的ID 16FTK_Context_GetListenPort获取当前监听的端口号 16FTK_Context_GetBindIP获取当前绑定的IP地址 17FTK_Context_IsBindListenPort判断是否绑定端口操作成功 17FTK_Context_TorrentFile设置兼容某些常见的错误torrent格式 17FTK_Context_OpenLanguageFile设置日志的语言文件 177下载任务API接口 187.1具体函数接口说明 18FTK_Downloader_Open打开一个下载句柄 18FTK_Downloader_Close释放一个下载句柄 18FTK_Downloader_PreInitIPFilter初始化IP过滤配置文件 18FTK_Downloader_PreInitSEQMode提前的初始化,按照块的先后顺序进行下载 19FTK_Downloader_PreInitFilePriority预先初始化文件选择下载的优先级别 19FTK_Downloader_Init初始化下载对象 19FTK_Downloader_Init2初始化下载对象 20FTK_Downloader_Init3初始化下载对象 21FTK_Downloader_Init4初始化下载对象 22FTK_Downloader_Release释放下载对象 23FTK_Downloader_Execute执行下载线程 23FTK_Downloader_Pause暂停下载 23FTK_Downloader_Resume恢复下载 24FTK_Downloader_IsInit是否已经初始化 24FTK_Downloader_GetState获取下载任务目前的阶段状态 24FTK_Downloader_IsOnlyCheckFile是否只是进行文件检查 24FTK_Downloader_IsFinished是否已经完成了下载(判断选择文件下载) 24FTK_Downloader_IsAllFinished是否已经完成了下载(全部下载) 25FTK_Downloader_AddSource连接指定的Peer 25FTK_Downloader_AddSourceEx连接指定的Peer 25FTK_Downloader_AddExtAnnounce外部动态增加辅助的Announce 25FTK_Downloader_ReannounceAll手动控制Announce马上进行连接 26FTK_Downloader_SetSeqPicker按照块的先后顺序进行下载(适用于边下载边播放的情况) 26FTK_Downloader_SetFilePriority设置下载文件的优先级别 26FTK_Downloader_ForceFilePriority强制立刻重新将文件的优先级赋值给Piece 27FTK_Downloader_ChangeMaxUploads重新设置最大的上传连接个数 28FTK_Downloader_SetFixMaxDownloadRate外部调用,手动设置最大的下载率限制(0.0表示没有限制) 28FTK_Downloader_GetFixMaxDownloadRate外部调用,获取手动设置最大的下载率限制(0.0表示没有限制) 28FTK_Downloader_SetFixMaxUploadRate外部调用,手动设置最大的上传率限制(0.0表示没有限制) 28FTK_Downloader_GetFixMaxUploadRate外部调用,获取手动设置最大的上传率限制(0.0表示没有限制) 29FTK_Downloader_SetSeedMaxUPSpeed主动限制某些特定的种子服务器(SEED),给自己的最大的上传率(0表示没有限制,注意单位是:KB) 29FTK_Downloader_BanPeerIP多少秒中内,禁止某个IP的连接,只在当前任务存在期间有效 29FTK_Downloader_GetThreadID获取线程的ID 298绑定下载任务到环境API接口 298.1具体函数说明 30FTK_GlobalVar_AddTorrentSHA1将某个Torrent文件的SHA1值加入队列 30FTK_GlobalVar_RemoveTorrentSHA1将某个Torrent文件的SHA1值从队列中删除 309设置代理接口API 319.1具体函数接口说明 31FTK_Proxy_SetOnlyTracker设置仅在连接Tracker时使用代理服务器 31FTK_Proxy_SetType清空当前的代理信息(仅用于PROXYTYPE_NOPROXY) 31FTK_Proxy_SetProxy设置代理(不能是PROXYTYPE_NOPROXY) 31FTK_Proxy_SetAuthProxy设置SOCKS5和HTTP1.1需要认证信息的代理 31FTK_Proxy_GetProxyType获取代理的类型 3110下载任务运行状态信息获取接口API 3210.1具体函数接口说明 32FTK_Stat_GetTotalFileHaveSize获取总共已经下载(验证成功)的数据 32FTK_Stat_GetSelectedFileHaveSize获取选择已经下载(验证成功)的数据 32FTK_Stat_GetStartSeqFileSize获取已经顺序下载的目前可以从头开始播放的数据长度 32FTK_Stat_GetLastDataSize获取最近一次下载的字节数 32FTK_Stat_GetBadDataSize获取总共丢弃的字节数 33FTK_Stat_GetTotalPeerCount当前总共的连接的个数 33FTK_Stat_GetActivePeerCount当前主动连接的个数 33FTK_Stat_GetPassivePeerCount当前的被动连接的个数 33FTK_Stat_GetConnectingPeerCount当前正在连接中的个数 33FTK_Stat_GetSeedCount获取已经连接的种子的个数 33FTK_Stat_GetUploadPeerCount获取正在上传的连接的个数 34FTK_Stat_GetDownloadPeerCount获取正在下载的连接的个数 34FTK_Stat_GetTotalAvailSeedCount获取总共可以获取的Seed的个数 34FTK_Stat_GetTotalAvailPeerCount获取总共可以获取的Peer的个数 34FTK_Stat_GetOldSeedPeerCount旧的种子的个数 34FTK_Stat_IsAnyTrackerOK取是否至少已经有一个Tracker连接成功 34FTK_Stat_GetDownloaded本次运行已经下载的数据长度 35FTK_Stat_GetUploaded本次运行已经上传的数据长度 35FTK_Stat_GetRunningTime本次已经运行时间(运行时间不同与下载时间) 35FTK_Stat_GetDownloadTime本次下载的时间(如果是做种,则下载时间永远为0) 35FTK_Stat_GetLeftTime本次下载剩余的时间,根据下载率计算 35FTK_Stat_GetUploadRate获取当前的上传率 36FTK_Stat_GetDownloadRate获取当前的下载率 36FTK_Stat_GetPieceState获取指定的Piece的下载进度 36FTK_Stat_GetCheckPieceSize获取检查文件的进度 36FTK_Stat_GetCheckPieceCount获取检查的Piece的个数 36FTK_Stat_GetAllocSpaceSize获取已经分配空间的大小 37FTK_Stat_GetHealthRate获取当前的健康率 37FTK_Stat_GetMaxCacheSize获取当前的最大缓存大小 37FTK_Stat_GetUseCacheSize获取已经使用的缓存大小 37FTK_Stat_GetWriteDiskCount获取本次写硬盘的总的次数 37FTK_Stat_GetRealWriteDiskCount获取本次真正写硬盘的次数 37FTK_Stat_GetReadDiskCount获取本次读硬盘的总的次数 38FTK_Stat_GetRealReadDiskCount获取本次真正读硬盘的次数 38FTK_Stat_GetWriteDiskFrenq获取写硬盘的频率(次/秒) 38FTK_Stat_GetRealWriteDiskFrenq获取真正写硬盘的频率(次/秒) 38FTK_Stat_GetReadDiskFrenq获取读硬盘的频率(次/秒) 38FTK_Stat_GetRealReadDiskFrenq获取真正读硬盘的频率(次/秒) 38FTK_Stat_GetLogPathFileName获取当前日志文件的路径+名称 39FTK_Stat_GetFileHaveSize获取指定的文件的进度 39FTK_Stat_GetPeerData获取当前用户状态信息的列表 39FTK_Stat_GetPeerRangeData获取当前部分用户状态信息的列表 40FTK_Stat_GetMiniPeerData获取当前用户状态信息的列表(只获取IP和端口) 40FTK_Stat_GetAnnounceData获取当前Announce状态信息的列表 40FTK_Stat_GetBTDownloaderInfo获取当前任务的调试信息 4111Torrent文件信息获取接口API 4111.1具体的函数说明 41FTK_Torrent_IsCipherTorrent判断是不是自己定义的加密的Torrent文件 41FTK_Torrent_Open执行从文件中读取数据并初始化对象操作 41FTK_Torrent_SafeOpen执行从文件中读取数据并初始化对象操作,失败,返回错误信息 42FTK_Torrent_IsCipherTorrentObj判断是不是自己定义的加密的Torrent数据流对象 42FTK_Torrent_OpenObj执行从Torrentbinaryobject中读取数据并初始化对象操作 43FTK_Torrent_Close关闭当前打开的Torrent文件 43FTK_Torrent_IsFile判断是目录还是文件 43FTK_Torrent_GetTorrentName获取Torrent名称 43FTK_Torrent_GetFilesCount获取torrent中的文件的个数(至少一个) 43FTK_Torrent_GetFileInfo获取torrent中的文件列表中的某个文件的信息 44FTK_Torrent_GetFiles获取torrent中的文件列表(至少一个) 44FTK_Torrent_GetInfoHash获取Info的Hash值,内部使用 45FTK_Torrent_GetHexInfoHash获取info的Hash值,十六进制 45FTK_Torrent_GetMainAnnounce获取mainannouceurl 46FTK_Torrent_GetAnnouncesCount获取Announce分组的个数 46FTK_Torrent_GetAnnounceSize获取指定的Announce分组包含的Announce的个数 46FTK_Torrent_GetAnnouncesVal获取指定的Announce分组中指定位置的Announce 46FTK_Torrent_GetComments获取注释 46FTK_Torrent_GetCreateTime获取Torrent创建时间 47FTK_Torrent_GetPieceSize获取piece块的大小 47FTK_Torrent_GetFileSize获取文件的大小 47FTK_Torrent_GetPieceCountPiece块的个数 47FTK_Torrent_GetPieceHashList获取PieceHash的列表 47FTK_Torrent_FreePieceHashList释放PieceHash列表 47FTK_Torrent_GetLanCodePage获取Torrent文件的语言编码 4812Torrent文件制作接口API 4812.1具体函数说明 48FTK_MT_Open打开一个制作torrent文件的句柄 48FTK_MT_Close关闭打开的制作Torrent文件的句柄 48FTK_MT_MakeTorrent执行生成对象的操作 48FTK_MT_StopMake停止Torrent文件制作 48FTK_MT_GetMTProgress获取制作文件的进度 48FTK_MT_SaveAsTorrentFile另存为Torrent文件 49FTK_MT_SetAnnounceUrl设置annouceurl 49FTK_MT_AddAnnounceList添加额外的Announce列表 49FTK_MT_AddAnnounceList2添加额外的Announce列表,example:announce1;announce2;announce3; 49FTK_MT_ClearAnnounceList清空额外的Announce列表 50FTK_MT_SetComments设置注释 50FTK_MT_SetPieceSize设置piece块的大小 50FTK_MT_SetFile设置torrent中的文件 50FTK_MT_SetPath设置torrent中的文件目录(多个文件) 50FTK_MT_SetLangCodePage设置Torrent文件的语言代码(只对文件名称,注释等有效) 5113Tracker服务器信息获取函数 5113.1FTK_Tracker_Http1HTTPtracker接口,接用于获取httpTracker某任务的状态信息 5113.2FTK_Tracker_Http2HTTPtracker接口,用于获取httpTracker某任务的状态信息 5213.3FTK_Tracker_UDP1UDPtracker接口,用于获取UDPTracker某任务的状态信息 5213.4FTK_Tracker_UDP2UDPtracker接口,用于获取UDPTracker某任务的状态信息 5314磁盘缓存函数 5314.1FTK_Disk_SetCache设置磁盘缓存的大小 5315其它辅助函数 5415.1具体函数说明 54FTK_License_Set置内核库的License的密钥 54FTK_Version_Info获取当前内核库的版本信息 54FTK_Protocol_IDS定义你自己的网络协议标识,可以避开某些网络运营商的协议封锁 54FTK_Identifier_String10定义自己的用户标识信息(Tracker服务器可以获取到) 54FTK_Http_UserAgent定义自己的提交给httptracker的http协议中的"UserAgent" 5516Windows操作系统环境相关函数 5516.1具体函数说明 55FTK_Win_GetLocalIP获取本机的IP地址(在有多个的情况下,选择第一个,或者按照一定算法选择最合适的一个) 55FTK_Win_OpenWinXPICSF打开操作系统的网络连接防火墙和网络连接共享(WindowsXP/Windows2003) 56FTK_Win_AddUPnPPortMapping执行对于支持UPnP协议的Router进行自动的端口映射配置(内网处于Router后的机器必用) 5617FTKernelAPIBT协议内核库最近更新 5617.1最近修改记录列表 56范围手册概述本文档阐述了FTKernelAPI兼容BT协议内核库接口的概念,整体框架,功能模块,API接口说明及示例。支持的开发语言环境FTKernelAPI兼容BT协议内核库可以适用于多种语言开发环境。目前已经应用过的语言环境主要有:VC++6.0/7.0,VB6.0/7.0,Delphi7.0,C++Builder,C#目前已经提供了针对上述不同语言环境的需要的库文件以及示例:VC++6.0/7.0:提供了头文件/Lib库文件/DLL库文件,提供了完整的示例代码。VB6.0/7.0:提供了Module文件FTKernelAPI.bas,提供了简单的示例代码。Delphi7.0:提供了FTKerenlAPI.pasUnit接口单元,提供了完整的示例代码。C++Builder:使用上类似VC++6.0/7.0,但是要注意使用implib.exe工具自己从DLL文件中生成lib库文件。C#:提供了FTKernelAPI.cs接口单元,提供了完整的示例代码。假如上边的列表中没有你使用的开发语言,你可以直接和我们联系,我们会尽快针对你使用的开发语言提供开发接口和示例程序。总体框架概述基本应用FTKernelAPI兼容BT协议内核库是需要Tracker(握手服务器)支持的点对点分布式下载系统。使用FTKernelAPI开发的程序,可以在Tracker的支持下,快速的实现P2P(BT)下载或者商业应用。API接口功能划分全局环境API接口全局环境API接口下载任务接口任务和环境绑定接口配置文件接口代理设置接口Torrent制作接口Torrent读取接口其他辅助接口功能划分说明:FTKernelAPI兼容BT协议内核库支持多个下载任务同时运行。但是环境只需要初始化一次。代理设置是全局有效的,设置后,所有的任务都会使用设置的代理服务器进行连接,传输数据。Torrent文件读取接口和Torrent文件制作接口是独立的。只是为了用户制作Torrent文件和读取Torrent文件信息时使用。在下载任务接口中,内部会自动处理Torrent文件。辅助接口是为了更好的配合FTKernelAPI兼容BT协议内核库使用不同的环境使用。子系统具体功能说明:全局环境API接口:初始化FTKernelAPI内核库的运行环境,注意,一个程序中只能初始化一次,程序关闭时要注意释放。配置文件接口:当不使用配置文件时,为了配置内核参数,需要使用配置文件接口。代理设置接口:设置内核库的代理功能。通过代理服务器建立P2P的连接进行传输。下载任务接口:执行下载任务的接口,一个程序中可以同时有多个下载任务存在,互相之间不影响。但是两个任务不能同时下载同一个Torrent文件到同一个的路径中。任务和环境绑定接口:非常重要,实现将下载任务绑定到全局的环境中,否则将不能做为种子,被其它的用户连接,就是说只能主动连接别的用户下载,不能被其它用户连接。下载状态信息查询接口:在下载任务接口打开的句柄的基础上调用,获取当前的下载任务的一些运行信息。Torrent文件读取接口:打开指定的Torrent文件,获取里面的信息。支持打开由FTKernelAPI制作的加密的Torrent文件。Torrent文件制作接口:制作Torrent文件。可以对于单个文件或者整个目录制作成Torrent文件。可以制作加密的Torrent文件。辅助接口:用于配合内核库的API接口的使用。包括自定义协议,设置自己的标识字符串,Windows防火墙和UPnP设置等等。绑定下载任务到环境的接口功能调用流程绑定下载任务到环境的接口初始化环境接口初始化环境接口设置代理接口(可选择)可以任意时刻调用释放环境接口创建任务1运行任务1结束任务1创建任务2运行任务2结束任务2查询任务的运行状态信息文件或者目录Torrent文件制作接口Torrent文件读取获取接口这两个接口和环境接口以及下载任务接口没有必然的联系注意:在释放环境前必须关闭所有任务创建任务n运行任务n结束任务n内核库的详细功能列表序号描述1全新高效的网络内核,高效稳定,高速下载时依然占用很少的CPU2支持通用的BitTorrent下载算法,支持下载通用的BitTorrent种子。3支持多任务下载,而只需要侦听一个TCPSocket端口4下载时支持磁盘缓存,并且支持设置磁盘缓存的大小5支持多HTTP和UDPTracker协议,UTF-8扩展,UDPTrackerv2协议6可以主动控制单个任务的下载和上传速度7断点续传,自动保存上一次的下载状态,下次下载自动续传,不必每次重新自检8支持手动对于文件的完整性进行单独的检测9持两种磁盘分配方式:边下载边分配,预先分配,可以灵活选择10支持代理服务器,支持Socks4,Socks4a,Socks5,Http1.1代理协议11支持用户间连接信息自动交换,减轻Tracker的负载压力12支持UPnP协议自动配置路由器端口映射,实现内网免配置(要求路由器支持UPnP)13防火墙配置,全自动配置XP网络连接防火墙(ICF)和网络连接共享(ICS)14支持一个Torrent文件中的多个文件有选择的下载,支持文件下载的优先级别设定15支持单个文件或者目录制作成Torrent文件,支持加密的Torrent文件(DES算法加密)16支持打开兼容官方标准协议的Torrent文件,支持打开自己制作的加密的Torrent文件。(DES算法解密),支持UTF-8扩展,支持多语言17支持获取当前AnnounceURL连接的状态信息18支持获取当前所有连接的用户的状态信息19支持获取运行任务的磁盘读写次数和节省的比率20支持获取目前占用缓存的大小21支持获取当前下载任务的健康率22支持获取总的下载进度和某个块的下载状态和进度23支持顺序下载,以便于边下载边播放的实现,用于实现电影点播平台24支持被动的回调触发做种子,只有有人请求下载时才加载任务到内存中25支持临时和永久封IP,兼容eMule的IP规则配置文件:ipfilter.dat26支持DHKE密钥交换算法,支持加密的BitTorrent协议流,避免网络封锁27支持自己定义协议标识,以便组成自己的私有的P2P协议网络28支持自己定义和HttpTracker通信时的UserAgent标识29支持自己定义自己的用户标识,以便和其他的帐号兼容30支持快速加载任务到内存中,做种子,避免漫长的检查时间31支持从指定的Tracker上获取某个Torrent文件的种子和用户信息32内网互联(NATTraversal)技术,突破网关,自动实现不同内网间的互联传输33支持通过公用DHT网络,实现无TrackerTorrent文件下载*备注:红颜色的功能表示正在开发中,还尚未在当前版本中实现。内核库的性能描述支持400+任务,占用内存控制在400MB左右支持超过40000+文件的大目录发布,打开后内存占用不超过15MB支持文件句柄缓存池,可以实现对于大文件量的发布在操作系统内存和端口数允许的基础上,任务个数理论上不受限制SeedClient(做种服务器)和UserClient(客户端)FTKernelAPIBT协议内核库同时支持SeedClient模式和UserClient模式,通过API接口的组合调用及参数配置,可以开发成为SeedClient也可以开发成为UserClient关于内核的线程许多第一次使用内核库的人会想将下载任务放在一个单独的线程中来运行,其实是模式化的思维在起作用,这里明确说明:在调用时千万不要将下载任务放在线程中运行,因为下载任务句柄内部本身就是一个线程在运行,所有的线程操作都封装在了内部,外部只需要调用接口,启动下载,就可以了。除了制作Torrent文件时为了不阻塞界面外,要开个线程调用。其余的所有的API接口不要开线程调用,就相当于操作普通的API一样操作。因为这些API内部自己处理了线程。例如:环境API内部,有一个线程在运行。每个下载任务内部可能有1~n个线程在运行。开发语言环境的注意事项VC++6.0/7.0无/详见示例代码BitZamVB6.0/7.0详见VB的示例代码,要注意的是VB6.0中没有64bit整数类型与FTKernelAPI库中的API的参数进行对应,因此VB6.0中使用内核库要自己处理64bit的整数类型。还要注意VB中传入结构体数组到内核库的API接口中获取信息时,返回的字符串为Byte类型的数组,获取后,显示前,要利用StrConv转换为VB的字符串类型。Delphi7.0无/详见Delphi的例子程序。C++BuilderC++Builder不能直接使用VC生成的lib库文件,要使用C++Builder自带的implib.exe程序从Dll文件中导出一个相应的lib库文件。C#无/详见示例代码CSharpDemo概念说明和数据结构定义概念说明概念概念解释QWORD在API的头文件中(FTKernelAPI.h)中定义了QWORD为C++的unsigned__int64类型。标识64bit的无符号整型。因为要处理大于4GB(2**32)大小的磁盘文件或者目录,所以必须使用64bit的整数类型表示文件的大小。在VB6.0中没有64bit整型,如果使用必须自己定义相应的type进行处理,VB7.0中可以直接使用。Delhpi、C++Builder可以直接使用。句柄(Handle)FTKernelAPIAPI的使用和WindowsAPI非常相似,就是使用某些API前,必须获取到相应的句柄。使用句柄需要注意的一个事情就是,打开后,不再使用时一定要关闭,否则会浪费内存等系统资源,甚至造成程序异常。用户标识的长度(IDSIZE=20)在官方BT协议中定义了一个20个字节的数据,每个BT协议的实现客户端可以在此20个字节中定义自己的标识。注意,此处是以二进制数据表示的。此标识的生成由内核库里面自己处理,此处定义的长度是为了获取用户列表信息时定义的数据结构中,明确分配的内存长度而使用。客户端版本信息长度(AGENTSIZE=64)从用户标识(IDSIZE=20)对应的数据中判断某些标志字节获取到的对方的程序版本和版本号信息。此处是以字符串来标识,例如:FlashBT0.654SHA1算法生成的哈稀值(散列值)的长度(SHA1_DIGEST_LENGTH=20)SHA1算法生成的值的长度,SHA1算法是BT协议的基础。通过SHA1算法实现确保数据的完整性,有效性。代理服务器内核库内部支持四种代理服务器:PROXYTYPE_SOCKS4Socks4代理服务器

PROXYTYPE_SOCKS4ASocks4a代理服务器

PROXYTYPE_SOCKS5,Socks5代理服务器

PROXYTYPE_HTTP11,Http1.1代理服务器UPnP协议内核库内部自动支持对于实现了UPnP协议的router(路由器)的端口映射配置。通过UPnP协议对于router(路由器)的自动配置,实现将内网计算机映射成能接受外部主动连接的计算机。提供P2P下载传输的性能。下载状态下载状态很重要,通过相关的API接口函数获取当前任务的下载状态,根据下载下载状态决定某些操作:DLSTATE_NONEDLSTATE_ALLOCING正在分配磁盘空间

DLSTATE_CHECKING正在检测文件的完整性

DLSTATE_DOWNLOAD正在下载中…

DLSTATE_PAUSING暂停任务中

DLSTATE_CHECKEND检测文件完成性完毕

DLSTATE_FETALERR下载中出现致命错误,停止

DLSTATE_TERMINATE下载任务停止一定要注意这些状态的处理,使用FTK_Downloader_GetState这个函数获取到任务的状态。因为有些API只有在某些状态下才可以使用,否则会导致程序的异常错误。Piece(块)BT协议中,文件是分成Piece来下载的Piece的状态标识Piece的下载是否完成。PIECESTATE_INCOMPLETE块还未下载完成

PIECESTATE_DOWNLOADING块正在下载中

PIECESTATE_COMPLETE块已经下载完成下载方式目前内核库支持两种下载方式:1.优先下载稀缺的块(防止对方不上传后无法下载)此下载方式,是默认的下载方式2.顺序下载按照块的先后顺序进行下载,此方式可以应用于下载电影文件时,边下载边播放用。WCXT_TCP_PORT

WCXT_UDP_PORT定义用于WindowsXPSP2上打开防火强或者UPnP映射时的类型:WCXT_TCP_PORT,TCP类型的端口

WCXT_UDP_PORT,UDP类型的端口Hex编码将二进制数据以字节为单位,以字符串进行表示,每个字节对应一个十六进制的字符编码.例如:00=>%00,01=>%01,FF=>%FF,FB=>%FB顺序下载顺序下载:

BT协议是将文件分成piece来发布和下载的。顺序下载是指内核在下载时,优先从文件开始,对于piece进行下载。但是不会集中下载某个piece,等待某个piece。例如:现在有50个用户连接,10个用户连接在下载,这10个用户连接是并行工作,抢占式选择piece下载的,但是有可能会造成第1到5个piece下载完毕,第6个没有下载完毕,但是第7到第100个已经下载完毕的情况。此时计算影音文件能播放的数据长度时是以计算到第5个piece为准。一旦第6个piece也下载完毕,则计算到第100个piece为长度。还有顺序下载只对单个文件或则全部文件下载有效,对于多个文件选择下载时无法计算当前可以播放的数据长度。数据结构定义用户连接信息结构体定义-_tagPeerData当从内核库获取某个任务的连接信息时使用。structstruct_tagPeerData{DWORDm_dwIP;USHORTm_nPort;BYTEm_pPeerID[IDSIZE];//BYTEm_bIsLocal;TCHARm_szVersion[AGENTSIZE];QWORDm_qwPeerHaveSize;floatm_fDownRate;floatm_fUpRate;QWORDm_qwDownloaded;QWORDm_qwUploaded;floatm_fTimeElapsed;floatm_fPeerDownRate;charm_szExtInfo[256];};m_dwIP:保存用户连接中对方的IP地址,以网络字节序保存。m_nPort:保存对方的端口号,本地字节序保存。m_pPeerID:保存用户标识,二进制格式。长度IDSIZE。m_bIsLocal:标识是否是本地主动发起的连接,是则TRUE,否则FALSE。m_szVersion:标识对方的软件名称和版本。例如,FlashBT0.654。m_qwPwwrHaveSize:保存对方当前已经下载的文件的大小。m_fDownRate:从对方下载数据的速度。m_fUpRate:给对方上传数据的速度。m_qwDownloaded:已经从对方那儿下载的数据的大小。m_qwUploaded:已经给对方上传数据的大小。m_fTimeElapsed:已经建立连接的时间,单位,秒。m_fPeerDownRate:对方的任务的下载速度。m_szExtInfo:额外的调试信息。不必使用。简化的用户连接信息结构体定义-_tagMiniPeerData当从内核库获取某个任务的简化连接信息时使用,主要是用户保存已经有的用户连接的IP和端口信息。structstruct_tagMiniPeerData{DWORD m_dwIP;USHORT m_nPort;};m_dwIP:保存用户连接中对方的IP地址,以网络字节序保存。m_nPort:保存对方的端口号,本地字节序保存。Announce地址的连接状态结构体定义-_tagAnnounceData用于在获取Announce的连接状态时使用。structstruct_tagAnnounceData{TCHARm_szURL[512];BYTEm_bWorking;BYTEm_bHeader;UINTm_nCount;UINTm_nFailed;floatm_fTimeLeft;floatm_fLastTime;TCHARm_szExtInfo[512];};m_szURL:Announce的链接地址。m_bWorking:是否正在连接中。m_bHeader:是否是一组Tracker中的第一个。m_nCount:已经连接的次数。m_nFailed:已经失败的次数。m_fTimeLeft:距离下次连接还有多长时间,单位,秒。m_szExtInfo:提供额外的调试信息,不必使用。文件信息结构体定义-_tagFileInfo用于在获取Torrent中的文件的信息时使用。structstruct_tagFileInfo{TCHARm_szFileName[512];QWORDm_qwFileSize;};m_szFileName:用于保存文件的名称,最大长度512个字节。m_qwFileSize:用于保存文件的长度。错误信息结构体定义-_tagErrInfostructstruct_tagErrInfo{TCHARm_szErrInfo[1024];};m_szErrInfo:传出错误的信息描述。配置文件API接口为什么会有配置文件接口?配置文件接口主要是为FTK_Context_Init2和FTK_Downloader_Init2两个函数服务的。FTK_Context_Init和FTK_Downloader_Init两个函数,都提供了一个配置文件路径参数,通过这个参数可以告诉两个函数要使用的配置文件。当这个两个参数为NULL传入时,两个函数都使用内部默认的配置参数。但是有些开发者希望没有配置文件存在的情况下,更改内核的默认配置参数,此时需要一个传入一个

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论