HINTERNET 句柄
這篇文章的內(nèi)容能夠簡單總結(jié)例如以下:
- WinINet函數(shù)創(chuàng)建和使用類型為HINTERNET的句柄
- HINTERNET句柄不能與其它類型的句柄互換使用
- 用InternetCloseHandle關(guān)閉HINTERNET句柄
- 有多種類型的HINTERNET句柄,它們形成一個樹結(jié)構(gòu),例如以下圖所看到的:
圖中帶陰影的方框創(chuàng)建的HINTERNET句柄被下一級的函數(shù)使用;背景空白的方框不創(chuàng)建HINTERNET句柄,僅使用上一級函數(shù)創(chuàng)建的句柄。HttpSendRequest、HttpSendRequestEx和HttpEndRequest有些特殊,它們的下層函數(shù)不是使用它們創(chuàng)建的HINTERNET句柄,而是HttpOpenRequest創(chuàng)建的句柄,在調(diào)用這三個函數(shù)后,就能夠調(diào)用下一級的函數(shù)了。
本節(jié)包括用于WinINet函數(shù)的句柄,以及它們的層次結(jié)構(gòu)的信息。
關(guān)于HINTERNET句柄
WinINet函數(shù)創(chuàng)建和使用類型為HINTERNET的句柄。HINTERNET句柄不能與其它類型的句柄互換。因此,HINTERNET句柄不能用于ReadFile或者CloseHandle等函數(shù)。相同地,其它類型的句柄也不能用于WinINet函數(shù)。比方說,CreateFile返回的句柄不能傳遞給InternetReadFile。
InternetCloseHandle函數(shù)用于關(guān)閉HINTERNET句柄。注意,句柄值非常快被回收重用。因此,假設(shè)關(guān)閉一個句柄,然后馬上生成一個新句柄,則新句柄的值非常可能與剛被關(guān)閉句柄的值同樣。
句柄層次結(jié)構(gòu)
HINTERNET句柄形成了一個樹結(jié)構(gòu)。InternetOpen函數(shù)返回的句柄是樹的根節(jié)點,InternetConnect函數(shù)返回的句柄則占有下一級,而FtpOpenFile、FtpFindFirstFile、HttpOpenRequest、GopherOpenFile和GopherFindFirstFile函數(shù)返回的句柄則是葉子節(jié)點。
下圖展示了HINTERNET句柄的層次結(jié)構(gòu)。圖中每一個方框代表返回HINTERNET句柄的一個函數(shù)。
最頂層的是InternetOpen函數(shù),它創(chuàng)建根節(jié)點。下一層包含InternetOpenUrl和InternetConnect函數(shù)。組成了最后一層的是使用InternetConnect返回的句柄的函數(shù)。
下圖展示了依賴于由InternetOpenUrl創(chuàng)建的句柄的函數(shù)。帶陰影的方框代表返回HINTERNET句柄的函數(shù),而空白方框代表使用HINTERNET句柄的函數(shù)。
InternetQueryDataAvailable、InternetReadFile和InternetSetFilePointer函數(shù)使用InternetOpenUrl創(chuàng)建的HINTERNET句柄。
FTP層次結(jié)構(gòu)
下圖展示了依賴于InternetConnect返回的FTP會話句柄的FTP函數(shù)。帶陰影的方框代表返回HINTERNET句柄的函數(shù),空白方框表示使用它們所依賴的函數(shù)創(chuàng)建的HINTERNET句柄的函數(shù)。
FtpCreateDirectory、FtpDeleteFile、FtpGetCurrentDirectory、FtpGetFile、FtpPutFile、FtpRemoveDirectory、FtpRenameFile和FtpSetCurrentDirectory函數(shù)都使用InternetConnect創(chuàng)建的HINTERNET句柄。
下圖展示了返回句柄的兩個FTP函數(shù),以及依賴于它們的函數(shù)。帶陰影的方框代表返回HINTERNET句柄的函數(shù),空白方框表示使用它們所依賴的函數(shù)創(chuàng)建的HINTERNET句柄的函數(shù)。
InternetFindNextFile函數(shù)依賴于FtpFindFirstFile創(chuàng)建的句柄;而InternetReadFile和InternetWriteFile使用FtpOpenFile創(chuàng)建的句柄。
Gopher層次結(jié)構(gòu)
下圖顯示了用于Gopher協(xié)議的函數(shù)。帶陰影的方框表示返回HINTERNET句柄的函數(shù),空白方框表示使用它們所依賴的函數(shù)創(chuàng)建的HINTERNET句柄的函數(shù)。
GopherGetAttribute函數(shù)依賴于InternetConnect創(chuàng)建的句柄。InternetFindNextFile使用GopherFindFirstFile創(chuàng)建的句柄。GopherOpenFile創(chuàng)建的句柄被InternetQueryDataAvailable和InternetReadFile使用。
HTTP層次結(jié)構(gòu)
下圖顯示了用于HTTP協(xié)議的函數(shù)。帶陰影的方框表示返回HINTERNET句柄的函數(shù),空白方框表示使用它們所依賴的函數(shù)創(chuàng)建的HINTERNET句柄的函數(shù)。
HttpAddRequestHeaders、HttpQueryInfo、HttpSendRequest、HttpSendRequestEx和InternetErrorDlg函數(shù)依賴于HttpOpenRequest創(chuàng)建的句柄。
下圖展示了使用由HttpOpenRequest創(chuàng)建、然后被HttpSendRequest發(fā)送的句柄的函數(shù)。帶陰影的方框表示返回HINTERNET句柄的函數(shù),空白方框表示使用它們所依賴的函數(shù)創(chuàng)建的HINTERNET句柄的函數(shù)。
由HttpOpenRequest返回的句柄被HttpSendRequest使用后,就能夠被InternetQueryDataAvailable、InternetReadFile和InternetSetFilePointer使用了。
由HttpOpenRequest返回的句柄,在被HttpSendRequestEx使用后,就能夠被HttpEndRequest、InternetReadFileEx和InternetWriteFile使用了。調(diào)用HttpEndRequest之后,句柄能夠被InternetReadFile、InternetSetFilePointer和InternetQueryDataAvailable使用。
總結(jié)
以上是生活随笔為你收集整理的HINTERNET 句柄的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 夏季的养生加减肥的食谱有哪些?
- 下一篇: Response.AddHeader使用