




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
FTKernelAPI兼容BT協(xié)議內(nèi)核庫API開發(fā)手冊參數(shù)說明版本V1.2最后修改日期2006-9-9版權(quán)北京惠軟暢聯(lián)網(wǎng)絡(luò)技術(shù)有限公司網(wǎng)址http://技術(shù)支持電話(010)-62984271技術(shù)支持MSNFlashBT@H常見問題解答:http:///chs/faqs.html
文檔摘要《FTKernelAPI兼容BT協(xié)議內(nèi)核庫API開發(fā)手冊》是FTKernelAPI兼容BT協(xié)議內(nèi)核庫的API的簡介和使用說明。介紹了FTKernelAPI的主要功能,特點,性能,并且對于具體的API接口進行了詳細的說明和示例。目錄1范圍 11.1手冊概述 11.2支持的開發(fā)語言環(huán)境 12總體框架概述 12.1基本應(yīng)用 12.2API接口功能劃分 12.3功能調(diào)用流程 42.4內(nèi)核庫的詳細功能列表 52.5內(nèi)核庫的性能描述 52.6SeedClient(做種服務(wù)器)和UserClient(客戶端) 62.7關(guān)于內(nèi)核的線程 63開發(fā)語言環(huán)境的注意事項 63.1VC++6.0/7.0 63.2VB6.0/7.0 63.3Delphi7.0 63.4C++Builder 63.5C# 64概念說明和數(shù)據(jù)結(jié)構(gòu)定義 74.1概念說明 74.2數(shù)據(jù)結(jié)構(gòu)定義 95配置文件API接口 125.1具體函數(shù)說明 12FTK_Config_Open創(chuàng)建一個新的配置文件句柄 12FTK_Config_Close銷毀一個存在的配置文件句柄 12FTK_Config_SetStr設(shè)置字符串選項 12FTK_Config_SetInt設(shè)置整型值選項 13FTK_Config_SetFloat設(shè)置浮點型選項 136全局環(huán)境API接口 146.1具體函數(shù)接口說明 14FTK_Context_Init環(huán)境初始化 14FTK_Context_Init2環(huán)境初始化 14FTK_Context_NotifyCB設(shè)置被動通知的回調(diào)函數(shù) 15FTK_Context_Release釋放整個環(huán)境 15FTK_Context_Run整個環(huán)境的事件驅(qū)動引擎 16FTK_Context_Stop強迫退出環(huán)境,停止運行 16FTK_Context_ReBindListenPort重新根據(jù)配置文件綁定端口 16FTK_Context_IsInit判斷是否已經(jīng)初始化 16FTK_Context_IsRunning判斷是否正在運行 16FTK_Context_GetThreadID獲取線程的ID 16FTK_Context_GetListenPort獲取當(dāng)前監(jiān)聽的端口號 16FTK_Context_GetBindIP獲取當(dāng)前綁定的IP地址 17FTK_Context_IsBindListenPort判斷是否綁定端口操作成功 17FTK_Context_TorrentFile設(shè)置兼容某些常見的錯誤torrent格式 17FTK_Context_OpenLanguageFile設(shè)置日志的語言文件 177下載任務(wù)API接口 187.1具體函數(shù)接口說明 18FTK_Downloader_Open打開一個下載句柄 18FTK_Downloader_Close釋放一個下載句柄 18FTK_Downloader_PreInitIPFilter初始化IP過濾配置文件 18FTK_Downloader_PreInitSEQMode提前的初始化,按照塊的先后順序進行下載 19FTK_Downloader_PreInitFilePriority預(yù)先初始化文件選擇下載的優(yōu)先級別 19FTK_Downloader_Init初始化下載對象 19FTK_Downloader_Init2初始化下載對象 20FTK_Downloader_Init3初始化下載對象 21FTK_Downloader_Init4初始化下載對象 22FTK_Downloader_Release釋放下載對象 23FTK_Downloader_Execute執(zhí)行下載線程 23FTK_Downloader_Pause暫停下載 23FTK_Downloader_Resume恢復(fù)下載 24FTK_Downloader_IsInit是否已經(jīng)初始化 24FTK_Downloader_GetState獲取下載任務(wù)目前的階段狀態(tài) 24FTK_Downloader_IsOnlyCheckFile是否只是進行文件檢查 24FTK_Downloader_IsFinished是否已經(jīng)完成了下載(判斷選擇文件下載) 24FTK_Downloader_IsAllFinished是否已經(jīng)完成了下載(全部下載) 25FTK_Downloader_AddSource連接指定的Peer 25FTK_Downloader_AddSourceEx連接指定的Peer 25FTK_Downloader_AddExtAnnounce外部動態(tài)增加輔助的Announce 25FTK_Downloader_ReannounceAll手動控制Announce馬上進行連接 26FTK_Downloader_SetSeqPicker按照塊的先后順序進行下載(適用于邊下載邊播放的情況) 26FTK_Downloader_SetFilePriority設(shè)置下載文件的優(yōu)先級別 26FTK_Downloader_ForceFilePriority強制立刻重新將文件的優(yōu)先級賦值給Piece 27FTK_Downloader_ChangeMaxUploads重新設(shè)置最大的上傳連接個數(shù) 28FTK_Downloader_SetFixMaxDownloadRate外部調(diào)用,手動設(shè)置最大的下載率限制(0.0表示沒有限制) 28FTK_Downloader_GetFixMaxDownloadRate外部調(diào)用,獲取手動設(shè)置最大的下載率限制(0.0表示沒有限制) 28FTK_Downloader_SetFixMaxUploadRate外部調(diào)用,手動設(shè)置最大的上傳率限制(0.0表示沒有限制) 28FTK_Downloader_GetFixMaxUploadRate外部調(diào)用,獲取手動設(shè)置最大的上傳率限制(0.0表示沒有限制) 29FTK_Downloader_SetSeedMaxUPSpeed主動限制某些特定的種子服務(wù)器(SEED),給自己的最大的上傳率(0表示沒有限制,注意單位是:KB) 29FTK_Downloader_BanPeerIP多少秒中內(nèi),禁止某個IP的連接,只在當(dāng)前任務(wù)存在期間有效 29FTK_Downloader_GetThreadID獲取線程的ID 298綁定下載任務(wù)到環(huán)境API接口 298.1具體函數(shù)說明 30FTK_GlobalVar_AddTorrentSHA1將某個Torrent文件的SHA1值加入隊列 30FTK_GlobalVar_RemoveTorrentSHA1將某個Torrent文件的SHA1值從隊列中刪除 309設(shè)置代理接口API 319.1具體函數(shù)接口說明 31FTK_Proxy_SetOnlyTracker設(shè)置僅在連接Tracker時使用代理服務(wù)器 31FTK_Proxy_SetType清空當(dāng)前的代理信息(僅用于PROXYTYPE_NOPROXY) 31FTK_Proxy_SetProxy設(shè)置代理(不能是PROXYTYPE_NOPROXY) 31FTK_Proxy_SetAuthProxy設(shè)置SOCKS5和HTTP1.1需要認證信息的代理 31FTK_Proxy_GetProxyType獲取代理的類型 3110下載任務(wù)運行狀態(tài)信息獲取接口API 3210.1具體函數(shù)接口說明 32FTK_Stat_GetTotalFileHaveSize獲取總共已經(jīng)下載(驗證成功)的數(shù)據(jù) 32FTK_Stat_GetSelectedFileHaveSize獲取選擇已經(jīng)下載(驗證成功)的數(shù)據(jù) 32FTK_Stat_GetStartSeqFileSize獲取已經(jīng)順序下載的目前可以從頭開始播放的數(shù)據(jù)長度 32FTK_Stat_GetLastDataSize獲取最近一次下載的字節(jié)數(shù) 32FTK_Stat_GetBadDataSize獲取總共丟棄的字節(jié)數(shù) 33FTK_Stat_GetTotalPeerCount當(dāng)前總共的連接的個數(shù) 33FTK_Stat_GetActivePeerCount當(dāng)前主動連接的個數(shù) 33FTK_Stat_GetPassivePeerCount當(dāng)前的被動連接的個數(shù) 33FTK_Stat_GetConnectingPeerCount當(dāng)前正在連接中的個數(shù) 33FTK_Stat_GetSeedCount獲取已經(jīng)連接的種子的個數(shù) 33FTK_Stat_GetUploadPeerCount獲取正在上傳的連接的個數(shù) 34FTK_Stat_GetDownloadPeerCount獲取正在下載的連接的個數(shù) 34FTK_Stat_GetTotalAvailSeedCount獲取總共可以獲取的Seed的個數(shù) 34FTK_Stat_GetTotalAvailPeerCount獲取總共可以獲取的Peer的個數(shù) 34FTK_Stat_GetOldSeedPeerCount舊的種子的個數(shù) 34FTK_Stat_IsAnyTrackerOK取是否至少已經(jīng)有一個Tracker連接成功 34FTK_Stat_GetDownloaded本次運行已經(jīng)下載的數(shù)據(jù)長度 35FTK_Stat_GetUploaded本次運行已經(jīng)上傳的數(shù)據(jù)長度 35FTK_Stat_GetRunningTime本次已經(jīng)運行時間(運行時間不同與下載時間) 35FTK_Stat_GetDownloadTime本次下載的時間(如果是做種,則下載時間永遠為0) 35FTK_Stat_GetLeftTime本次下載剩余的時間,根據(jù)下載率計算 35FTK_Stat_GetUploadRate獲取當(dāng)前的上傳率 36FTK_Stat_GetDownloadRate獲取當(dāng)前的下載率 36FTK_Stat_GetPieceState獲取指定的Piece的下載進度 36FTK_Stat_GetCheckPieceSize獲取檢查文件的進度 36FTK_Stat_GetCheckPieceCount獲取檢查的Piece的個數(shù) 36FTK_Stat_GetAllocSpaceSize獲取已經(jīng)分配空間的大小 37FTK_Stat_GetHealthRate獲取當(dāng)前的健康率 37FTK_Stat_GetMaxCacheSize獲取當(dāng)前的最大緩存大小 37FTK_Stat_GetUseCacheSize獲取已經(jīng)使用的緩存大小 37FTK_Stat_GetWriteDiskCount獲取本次寫硬盤的總的次數(shù) 37FTK_Stat_GetRealWriteDiskCount獲取本次真正寫硬盤的次數(shù) 37FTK_Stat_GetReadDiskCount獲取本次讀硬盤的總的次數(shù) 38FTK_Stat_GetRealReadDiskCount獲取本次真正讀硬盤的次數(shù) 38FTK_Stat_GetWriteDiskFrenq獲取寫硬盤的頻率(次/秒) 38FTK_Stat_GetRealWriteDiskFrenq獲取真正寫硬盤的頻率(次/秒) 38FTK_Stat_GetReadDiskFrenq獲取讀硬盤的頻率(次/秒) 38FTK_Stat_GetRealReadDiskFrenq獲取真正讀硬盤的頻率(次/秒) 38FTK_Stat_GetLogPathFileName獲取當(dāng)前日志文件的路徑+名稱 39FTK_Stat_GetFileHaveSize獲取指定的文件的進度 39FTK_Stat_GetPeerData獲取當(dāng)前用戶狀態(tài)信息的列表 39FTK_Stat_GetPeerRangeData獲取當(dāng)前部分用戶狀態(tài)信息的列表 40FTK_Stat_GetMiniPeerData獲取當(dāng)前用戶狀態(tài)信息的列表(只獲取IP和端口) 40FTK_Stat_GetAnnounceData獲取當(dāng)前Announce狀態(tài)信息的列表 40FTK_Stat_GetBTDownloaderInfo獲取當(dāng)前任務(wù)的調(diào)試信息 4111Torrent文件信息獲取接口API 4111.1具體的函數(shù)說明 41FTK_Torrent_IsCipherTorrent判斷是不是自己定義的加密的Torrent文件 41FTK_Torrent_Open執(zhí)行從文件中讀取數(shù)據(jù)并初始化對象操作 41FTK_Torrent_SafeOpen執(zhí)行從文件中讀取數(shù)據(jù)并初始化對象操作,失敗,返回錯誤信息 42FTK_Torrent_IsCipherTorrentObj判斷是不是自己定義的加密的Torrent數(shù)據(jù)流對象 42FTK_Torrent_OpenObj執(zhí)行從Torrentbinaryobject中讀取數(shù)據(jù)并初始化對象操作 43FTK_Torrent_Close關(guān)閉當(dāng)前打開的Torrent文件 43FTK_Torrent_IsFile判斷是目錄還是文件 43FTK_Torrent_GetTorrentName獲取Torrent名稱 43FTK_Torrent_GetFilesCount獲取torrent中的文件的個數(shù)(至少一個) 43FTK_Torrent_GetFileInfo獲取torrent中的文件列表中的某個文件的信息 44FTK_Torrent_GetFiles獲取torrent中的文件列表(至少一個) 44FTK_Torrent_GetInfoHash獲取Info的Hash值,內(nèi)部使用 45FTK_Torrent_GetHexInfoHash獲取info的Hash值,十六進制 45FTK_Torrent_GetMainAnnounce獲取mainannouceurl 46FTK_Torrent_GetAnnouncesCount獲取Announce分組的個數(shù) 46FTK_Torrent_GetAnnounceSize獲取指定的Announce分組包含的Announce的個數(shù) 46FTK_Torrent_GetAnnouncesVal獲取指定的Announce分組中指定位置的Announce 46FTK_Torrent_GetComments獲取注釋 46FTK_Torrent_GetCreateTime獲取Torrent創(chuàng)建時間 47FTK_Torrent_GetPieceSize獲取piece塊的大小 47FTK_Torrent_GetFileSize獲取文件的大小 47FTK_Torrent_GetPieceCountPiece塊的個數(shù) 47FTK_Torrent_GetPieceHashList獲取PieceHash的列表 47FTK_Torrent_FreePieceHashList釋放PieceHash列表 47FTK_Torrent_GetLanCodePage獲取Torrent文件的語言編碼 4812Torrent文件制作接口API 4812.1具體函數(shù)說明 48FTK_MT_Open打開一個制作torrent文件的句柄 48FTK_MT_Close關(guān)閉打開的制作Torrent文件的句柄 48FTK_MT_MakeTorrent執(zhí)行生成對象的操作 48FTK_MT_StopMake停止Torrent文件制作 48FTK_MT_GetMTProgress獲取制作文件的進度 48FTK_MT_SaveAsTorrentFile另存為Torrent文件 49FTK_MT_SetAnnounceUrl設(shè)置annouceurl 49FTK_MT_AddAnnounceList添加額外的Announce列表 49FTK_MT_AddAnnounceList2添加額外的Announce列表,example:announce1;announce2;announce3; 49FTK_MT_ClearAnnounceList清空額外的Announce列表 50FTK_MT_SetComments設(shè)置注釋 50FTK_MT_SetPieceSize設(shè)置piece塊的大小 50FTK_MT_SetFile設(shè)置torrent中的文件 50FTK_MT_SetPath設(shè)置torrent中的文件目錄(多個文件) 50FTK_MT_SetLangCodePage設(shè)置Torrent文件的語言代碼(只對文件名稱,注釋等有效) 5113Tracker服務(wù)器信息獲取函數(shù) 5113.1FTK_Tracker_Http1HTTPtracker接口,接用于獲取httpTracker某任務(wù)的狀態(tài)信息 5113.2FTK_Tracker_Http2HTTPtracker接口,用于獲取httpTracker某任務(wù)的狀態(tài)信息 5213.3FTK_Tracker_UDP1UDPtracker接口,用于獲取UDPTracker某任務(wù)的狀態(tài)信息 5213.4FTK_Tracker_UDP2UDPtracker接口,用于獲取UDPTracker某任務(wù)的狀態(tài)信息 5314磁盤緩存函數(shù) 5314.1FTK_Disk_SetCache設(shè)置磁盤緩存的大小 5315其它輔助函數(shù) 5415.1具體函數(shù)說明 54FTK_License_Set置內(nèi)核庫的License的密鑰 54FTK_Version_Info獲取當(dāng)前內(nèi)核庫的版本信息 54FTK_Protocol_IDS定義你自己的網(wǎng)絡(luò)協(xié)議標識,可以避開某些網(wǎng)絡(luò)運營商的協(xié)議封鎖 54FTK_Identifier_String10定義自己的用戶標識信息(Tracker服務(wù)器可以獲取到) 54FTK_Http_UserAgent定義自己的提交給httptracker的http協(xié)議中的"UserAgent" 5516Windows操作系統(tǒng)環(huán)境相關(guān)函數(shù) 5516.1具體函數(shù)說明 55FTK_Win_GetLocalIP獲取本機的IP地址(在有多個的情況下,選擇第一個,或者按照一定算法選擇最合適的一個) 55FTK_Win_OpenWinXPICSF打開操作系統(tǒng)的網(wǎng)絡(luò)連接防火墻和網(wǎng)絡(luò)連接共享(WindowsXP/Windows2003) 56FTK_Win_AddUPnPPortMapping執(zhí)行對于支持UPnP協(xié)議的Router進行自動的端口映射配置(內(nèi)網(wǎng)處于Router后的機器必用) 5617FTKernelAPIBT協(xié)議內(nèi)核庫最近更新 5617.1最近修改記錄列表 56范圍手冊概述本文檔闡述了FTKernelAPI兼容BT協(xié)議內(nèi)核庫接口的概念,整體框架,功能模塊,API接口說明及示例。支持的開發(fā)語言環(huán)境FTKernelAPI兼容BT協(xié)議內(nèi)核庫可以適用于多種語言開發(fā)環(huán)境。目前已經(jīng)應(yīng)用過的語言環(huán)境主要有:VC++6.0/7.0,VB6.0/7.0,Delphi7.0,C++Builder,C#目前已經(jīng)提供了針對上述不同語言環(huán)境的需要的庫文件以及示例: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接口單元,提供了完整的示例代碼。假如上邊的列表中沒有你使用的開發(fā)語言,你可以直接和我們聯(lián)系,我們會盡快針對你使用的開發(fā)語言提供開發(fā)接口和示例程序??傮w框架概述基本應(yīng)用FTKernelAPI兼容BT協(xié)議內(nèi)核庫是需要Tracker(握手服務(wù)器)支持的點對點分布式下載系統(tǒng)。使用FTKernelAPI開發(fā)的程序,可以在Tracker的支持下,快速的實現(xiàn)P2P(BT)下載或者商業(yè)應(yīng)用。API接口功能劃分全局環(huán)境API接口全局環(huán)境API接口下載任務(wù)接口任務(wù)和環(huán)境綁定接口配置文件接口代理設(shè)置接口Torrent制作接口Torrent讀取接口其他輔助接口功能劃分說明:FTKernelAPI兼容BT協(xié)議內(nèi)核庫支持多個下載任務(wù)同時運行。但是環(huán)境只需要初始化一次。代理設(shè)置是全局有效的,設(shè)置后,所有的任務(wù)都會使用設(shè)置的代理服務(wù)器進行連接,傳輸數(shù)據(jù)。Torrent文件讀取接口和Torrent文件制作接口是獨立的。只是為了用戶制作Torrent文件和讀取Torrent文件信息時使用。在下載任務(wù)接口中,內(nèi)部會自動處理Torrent文件。輔助接口是為了更好的配合FTKernelAPI兼容BT協(xié)議內(nèi)核庫使用不同的環(huán)境使用。子系統(tǒng)具體功能說明:全局環(huán)境API接口:初始化FTKernelAPI內(nèi)核庫的運行環(huán)境,注意,一個程序中只能初始化一次,程序關(guān)閉時要注意釋放。配置文件接口:當(dāng)不使用配置文件時,為了配置內(nèi)核參數(shù),需要使用配置文件接口。代理設(shè)置接口:設(shè)置內(nèi)核庫的代理功能。通過代理服務(wù)器建立P2P的連接進行傳輸。下載任務(wù)接口:執(zhí)行下載任務(wù)的接口,一個程序中可以同時有多個下載任務(wù)存在,互相之間不影響。但是兩個任務(wù)不能同時下載同一個Torrent文件到同一個的路徑中。任務(wù)和環(huán)境綁定接口:非常重要,實現(xiàn)將下載任務(wù)綁定到全局的環(huán)境中,否則將不能做為種子,被其它的用戶連接,就是說只能主動連接別的用戶下載,不能被其它用戶連接。下載狀態(tài)信息查詢接口:在下載任務(wù)接口打開的句柄的基礎(chǔ)上調(diào)用,獲取當(dāng)前的下載任務(wù)的一些運行信息。Torrent文件讀取接口:打開指定的Torrent文件,獲取里面的信息。支持打開由FTKernelAPI制作的加密的Torrent文件。Torrent文件制作接口:制作Torrent文件??梢詫τ趩蝹€文件或者整個目錄制作成Torrent文件??梢灾谱骷用艿腡orrent文件。輔助接口:用于配合內(nèi)核庫的API接口的使用。包括自定義協(xié)議,設(shè)置自己的標識字符串,Windows防火墻和UPnP設(shè)置等等。綁定下載任務(wù)到環(huán)境的接口功能調(diào)用流程綁定下載任務(wù)到環(huán)境的接口初始化環(huán)境接口初始化環(huán)境接口設(shè)置代理接口(可選擇)可以任意時刻調(diào)用釋放環(huán)境接口創(chuàng)建任務(wù)1運行任務(wù)1結(jié)束任務(wù)1創(chuàng)建任務(wù)2運行任務(wù)2結(jié)束任務(wù)2查詢?nèi)蝿?wù)的運行狀態(tài)信息文件或者目錄Torrent文件制作接口Torrent文件讀取獲取接口這兩個接口和環(huán)境接口以及下載任務(wù)接口沒有必然的聯(lián)系注意:在釋放環(huán)境前必須關(guān)閉所有任務(wù)創(chuàng)建任務(wù)n運行任務(wù)n結(jié)束任務(wù)n內(nèi)核庫的詳細功能列表序號描述1全新高效的網(wǎng)絡(luò)內(nèi)核,高效穩(wěn)定,高速下載時依然占用很少的CPU2支持通用的BitTorrent下載算法,支持下載通用的BitTorrent種子。3支持多任務(wù)下載,而只需要偵聽一個TCPSocket端口4下載時支持磁盤緩存,并且支持設(shè)置磁盤緩存的大小5支持多HTTP和UDPTracker協(xié)議,UTF-8擴展,UDPTrackerv2協(xié)議6可以主動控制單個任務(wù)的下載和上傳速度7斷點續(xù)傳,自動保存上一次的下載狀態(tài),下次下載自動續(xù)傳,不必每次重新自檢8支持手動對于文件的完整性進行單獨的檢測9持兩種磁盤分配方式:邊下載邊分配,預(yù)先分配,可以靈活選擇10支持代理服務(wù)器,支持Socks4,Socks4a,Socks5,Http1.1代理協(xié)議11支持用戶間連接信息自動交換,減輕Tracker的負載壓力12支持UPnP協(xié)議自動配置路由器端口映射,實現(xiàn)內(nèi)網(wǎng)免配置(要求路由器支持UPnP)13防火墻配置,全自動配置XP網(wǎng)絡(luò)連接防火墻(ICF)和網(wǎng)絡(luò)連接共享(ICS)14支持一個Torrent文件中的多個文件有選擇的下載,支持文件下載的優(yōu)先級別設(shè)定15支持單個文件或者目錄制作成Torrent文件,支持加密的Torrent文件(DES算法加密)16支持打開兼容官方標準協(xié)議的Torrent文件,支持打開自己制作的加密的Torrent文件。(DES算法解密),支持UTF-8擴展,支持多語言17支持獲取當(dāng)前AnnounceURL連接的狀態(tài)信息18支持獲取當(dāng)前所有連接的用戶的狀態(tài)信息19支持獲取運行任務(wù)的磁盤讀寫次數(shù)和節(jié)省的比率20支持獲取目前占用緩存的大小21支持獲取當(dāng)前下載任務(wù)的健康率22支持獲取總的下載進度和某個塊的下載狀態(tài)和進度23支持順序下載,以便于邊下載邊播放的實現(xiàn),用于實現(xiàn)電影點播平臺24支持被動的回調(diào)觸發(fā)做種子,只有有人請求下載時才加載任務(wù)到內(nèi)存中25支持臨時和永久封IP,兼容eMule的IP規(guī)則配置文件:ipfilter.dat26支持DHKE密鑰交換算法,支持加密的BitTorrent協(xié)議流,避免網(wǎng)絡(luò)封鎖27支持自己定義協(xié)議標識,以便組成自己的私有的P2P協(xié)議網(wǎng)絡(luò)28支持自己定義和HttpTracker通信時的UserAgent標識29支持自己定義自己的用戶標識,以便和其他的帳號兼容30支持快速加載任務(wù)到內(nèi)存中,做種子,避免漫長的檢查時間31支持從指定的Tracker上獲取某個Torrent文件的種子和用戶信息32內(nèi)網(wǎng)互聯(lián)(NATTraversal)技術(shù),突破網(wǎng)關(guān),自動實現(xiàn)不同內(nèi)網(wǎng)間的互聯(lián)傳輸33支持通過公用DHT網(wǎng)絡(luò),實現(xiàn)無TrackerTorrent文件下載*備注:紅顏色的功能表示正在開發(fā)中,還尚未在當(dāng)前版本中實現(xiàn)。內(nèi)核庫的性能描述支持400+任務(wù),占用內(nèi)存控制在400MB左右支持超過40000+文件的大目錄發(fā)布,打開后內(nèi)存占用不超過15MB支持文件句柄緩存池,可以實現(xiàn)對于大文件量的發(fā)布在操作系統(tǒng)內(nèi)存和端口數(shù)允許的基礎(chǔ)上,任務(wù)個數(shù)理論上不受限制SeedClient(做種服務(wù)器)和UserClient(客戶端)FTKernelAPIBT協(xié)議內(nèi)核庫同時支持SeedClient模式和UserClient模式,通過API接口的組合調(diào)用及參數(shù)配置,可以開發(fā)成為SeedClient也可以開發(fā)成為UserClient關(guān)于內(nèi)核的線程許多第一次使用內(nèi)核庫的人會想將下載任務(wù)放在一個單獨的線程中來運行,其實是模式化的思維在起作用,這里明確說明:在調(diào)用時千萬不要將下載任務(wù)放在線程中運行,因為下載任務(wù)句柄內(nèi)部本身就是一個線程在運行,所有的線程操作都封裝在了內(nèi)部,外部只需要調(diào)用接口,啟動下載,就可以了。除了制作Torrent文件時為了不阻塞界面外,要開個線程調(diào)用。其余的所有的API接口不要開線程調(diào)用,就相當(dāng)于操作普通的API一樣操作。因為這些API內(nèi)部自己處理了線程。例如:環(huán)境API內(nèi)部,有一個線程在運行。每個下載任務(wù)內(nèi)部可能有1~n個線程在運行。開發(fā)語言環(huán)境的注意事項VC++6.0/7.0無/詳見示例代碼BitZamVB6.0/7.0詳見VB的示例代碼,要注意的是VB6.0中沒有64bit整數(shù)類型與FTKernelAPI庫中的API的參數(shù)進行對應(yīng),因此VB6.0中使用內(nèi)核庫要自己處理64bit的整數(shù)類型。還要注意VB中傳入結(jié)構(gòu)體數(shù)組到內(nèi)核庫的API接口中獲取信息時,返回的字符串為Byte類型的數(shù)組,獲取后,顯示前,要利用StrConv轉(zhuǎn)換為VB的字符串類型。Delphi7.0無/詳見Delphi的例子程序。C++BuilderC++Builder不能直接使用VC生成的lib庫文件,要使用C++Builder自帶的implib.exe程序從Dll文件中導(dǎo)出一個相應(yīng)的lib庫文件。C#無/詳見示例代碼CSharpDemo概念說明和數(shù)據(jù)結(jié)構(gòu)定義概念說明概念概念解釋QWORD在API的頭文件中(FTKernelAPI.h)中定義了QWORD為C++的unsigned__int64類型。標識64bit的無符號整型。因為要處理大于4GB(2**32)大小的磁盤文件或者目錄,所以必須使用64bit的整數(shù)類型表示文件的大小。在VB6.0中沒有64bit整型,如果使用必須自己定義相應(yīng)的type進行處理,VB7.0中可以直接使用。Delhpi、C++Builder可以直接使用。句柄(Handle)FTKernelAPIAPI的使用和WindowsAPI非常相似,就是使用某些API前,必須獲取到相應(yīng)的句柄。使用句柄需要注意的一個事情就是,打開后,不再使用時一定要關(guān)閉,否則會浪費內(nèi)存等系統(tǒng)資源,甚至造成程序異常。用戶標識的長度(IDSIZE=20)在官方BT協(xié)議中定義了一個20個字節(jié)的數(shù)據(jù),每個BT協(xié)議的實現(xiàn)客戶端可以在此20個字節(jié)中定義自己的標識。注意,此處是以二進制數(shù)據(jù)表示的。此標識的生成由內(nèi)核庫里面自己處理,此處定義的長度是為了獲取用戶列表信息時定義的數(shù)據(jù)結(jié)構(gòu)中,明確分配的內(nèi)存長度而使用??蛻舳税姹拘畔㈤L度(AGENTSIZE=64)從用戶標識(IDSIZE=20)對應(yīng)的數(shù)據(jù)中判斷某些標志字節(jié)獲取到的對方的程序版本和版本號信息。此處是以字符串來標識,例如:FlashBT0.654SHA1算法生成的哈稀值(散列值)的長度(SHA1_DIGEST_LENGTH=20)SHA1算法生成的值的長度,SHA1算法是BT協(xié)議的基礎(chǔ)。通過SHA1算法實現(xiàn)確保數(shù)據(jù)的完整性,有效性。代理服務(wù)器內(nèi)核庫內(nèi)部支持四種代理服務(wù)器:PROXYTYPE_SOCKS4Socks4代理服務(wù)器
PROXYTYPE_SOCKS4ASocks4a代理服務(wù)器
PROXYTYPE_SOCKS5,Socks5代理服務(wù)器
PROXYTYPE_HTTP11,Http1.1代理服務(wù)器UPnP協(xié)議內(nèi)核庫內(nèi)部自動支持對于實現(xiàn)了UPnP協(xié)議的router(路由器)的端口映射配置。通過UPnP協(xié)議對于router(路由器)的自動配置,實現(xiàn)將內(nèi)網(wǎng)計算機映射成能接受外部主動連接的計算機。提供P2P下載傳輸?shù)男阅?。下載狀態(tài)下載狀態(tài)很重要,通過相關(guān)的API接口函數(shù)獲取當(dāng)前任務(wù)的下載狀態(tài),根據(jù)下載下載狀態(tài)決定某些操作:DLSTATE_NONEDLSTATE_ALLOCING正在分配磁盤空間
DLSTATE_CHECKING正在檢測文件的完整性
DLSTATE_DOWNLOAD正在下載中…
DLSTATE_PAUSING暫停任務(wù)中
DLSTATE_CHECKEND檢測文件完成性完畢
DLSTATE_FETALERR下載中出現(xiàn)致命錯誤,停止
DLSTATE_TERMINATE下載任務(wù)停止一定要注意這些狀態(tài)的處理,使用FTK_Downloader_GetState這個函數(shù)獲取到任務(wù)的狀態(tài)。因為有些API只有在某些狀態(tài)下才可以使用,否則會導(dǎo)致程序的異常錯誤。Piece(塊)BT協(xié)議中,文件是分成Piece來下載的Piece的狀態(tài)標識Piece的下載是否完成。PIECESTATE_INCOMPLETE塊還未下載完成
PIECESTATE_DOWNLOADING塊正在下載中
PIECESTATE_COMPLETE塊已經(jīng)下載完成下載方式目前內(nèi)核庫支持兩種下載方式:1.優(yōu)先下載稀缺的塊(防止對方不上傳后無法下載)此下載方式,是默認的下載方式2.順序下載按照塊的先后順序進行下載,此方式可以應(yīng)用于下載電影文件時,邊下載邊播放用。WCXT_TCP_PORT
WCXT_UDP_PORT定義用于WindowsXPSP2上打開防火強或者UPnP映射時的類型:WCXT_TCP_PORT,TCP類型的端口
WCXT_UDP_PORT,UDP類型的端口Hex編碼將二進制數(shù)據(jù)以字節(jié)為單位,以字符串進行表示,每個字節(jié)對應(yīng)一個十六進制的字符編碼.例如:00=>%00,01=>%01,FF=>%FF,FB=>%FB順序下載順序下載:
BT協(xié)議是將文件分成piece來發(fā)布和下載的。順序下載是指內(nèi)核在下載時,優(yōu)先從文件開始,對于piece進行下載。但是不會集中下載某個piece,等待某個piece。例如:現(xiàn)在有50個用戶連接,10個用戶連接在下載,這10個用戶連接是并行工作,搶占式選擇piece下載的,但是有可能會造成第1到5個piece下載完畢,第6個沒有下載完畢,但是第7到第100個已經(jīng)下載完畢的情況。此時計算影音文件能播放的數(shù)據(jù)長度時是以計算到第5個piece為準。一旦第6個piece也下載完畢,則計算到第100個piece為長度。還有順序下載只對單個文件或則全部文件下載有效,對于多個文件選擇下載時無法計算當(dāng)前可以播放的數(shù)據(jù)長度。數(shù)據(jù)結(jié)構(gòu)定義用戶連接信息結(jié)構(gòu)體定義-_tagPeerData當(dāng)從內(nèi)核庫獲取某個任務(wù)的連接信息時使用。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地址,以網(wǎng)絡(luò)字節(jié)序保存。m_nPort:保存對方的端口號,本地字節(jié)序保存。m_pPeerID:保存用戶標識,二進制格式。長度IDSIZE。m_bIsLocal:標識是否是本地主動發(fā)起的連接,是則TRUE,否則FALSE。m_szVersion:標識對方的軟件名稱和版本。例如,F(xiàn)lashBT0.654。m_qwPwwrHaveSize:保存對方當(dāng)前已經(jīng)下載的文件的大小。m_fDownRate:從對方下載數(shù)據(jù)的速度。m_fUpRate:給對方上傳數(shù)據(jù)的速度。m_qwDownloaded:已經(jīng)從對方那兒下載的數(shù)據(jù)的大小。m_qwUploaded:已經(jīng)給對方上傳數(shù)據(jù)的大小。m_fTimeElapsed:已經(jīng)建立連接的時間,單位,秒。m_fPeerDownRate:對方的任務(wù)的下載速度。m_szExtInfo:額外的調(diào)試信息。不必使用。簡化的用戶連接信息結(jié)構(gòu)體定義-_tagMiniPeerData當(dāng)從內(nèi)核庫獲取某個任務(wù)的簡化連接信息時使用,主要是用戶保存已經(jīng)有的用戶連接的IP和端口信息。structstruct_tagMiniPeerData{DWORD m_dwIP;USHORT m_nPort;};m_dwIP:保存用戶連接中對方的IP地址,以網(wǎng)絡(luò)字節(jié)序保存。m_nPort:保存對方的端口號,本地字節(jié)序保存。Announce地址的連接狀態(tài)結(jié)構(gòu)體定義-_tagAnnounceData用于在獲取Announce的連接狀態(tài)時使用。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:已經(jīng)連接的次數(shù)。m_nFailed:已經(jīng)失敗的次數(shù)。m_fTimeLeft:距離下次連接還有多長時間,單位,秒。m_szExtInfo:提供額外的調(diào)試信息,不必使用。文件信息結(jié)構(gòu)體定義-_tagFileInfo用于在獲取Torrent中的文件的信息時使用。structstruct_tagFileInfo{TCHARm_szFileName[512];QWORDm_qwFileSize;};m_szFileName:用于保存文件的名稱,最大長度512個字節(jié)。m_qwFileSize:用于保存文件的長度。錯誤信息結(jié)構(gòu)體定義-_tagErrInfostructstruct_tagErrInfo{TCHARm_szErrInfo[1024];};m_szErrInfo:傳出錯誤的信息描述。配置文件API接口為什么會有配置文件接口?配置文件接口主要是為FTK_Context_Init2和FTK_Downloader_Init2兩個函數(shù)服務(wù)的。FTK_Context_Init和FTK_Downloader_Init兩個函數(shù),都提供了一個配置文件路徑參數(shù),通過這個參數(shù)可以告訴兩個函數(shù)要使用的配置文件。當(dāng)這個兩個參數(shù)為NULL傳入時,兩個函數(shù)都使用內(nèi)部默認的配置參數(shù)。但是有些開發(fā)者希望沒有配置文件存在的情況下,更改內(nèi)核的默認配置參數(shù),此時需要一個傳入一個
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 合資設(shè)備合同范本
- 業(yè)主瓷磚購買合同范本
- 公司廠房翻新施工合同范本
- 咨詢策劃服務(wù)合同范例
- 中標平移合同范本
- 合作測試合同范本
- 課題申報書代寫正規(guī)機構(gòu)
- 內(nèi)衣委托加工合同范本
- 信息項目合同范本
- 體育產(chǎn)業(yè)發(fā)展趨勢及市場潛力研究
- 藥劑學(xué)-名詞解釋
- 口語課件Unit 1 Ways of Traveling Possibility and Impossibility
- 做一個幸福教師
- 城市支路施工組織設(shè)計
- 耐堿玻纖網(wǎng)格布檢測報告
- 20米往返跑教案 (2)
- 甲醛安全周知卡
- 《書法練習(xí)指導(dǎo)》教案江蘇鳳凰少年兒童出版社四年級下冊
- 三菱變頻器e700使用手冊基礎(chǔ)篇
- 公開課聽課簽到表(共1頁)
- DZ47LE-63 防雷型漏電斷路器說明書
評論
0/150
提交評論