轉載 winsock、ws2_3二、WinInet、WinHttp 對比

https://www.cnblogs.com/liuning8023/archive/2013/04/08/3008765.htmlhtml

在 Windows 平臺開發網絡程序, 可使用不一樣的庫, 可是最經常使用的仍是微軟本身開發的庫。具體說來:chrome

Winsock


Winsock 是工做於網絡層和傳輸層的庫,對於編寫 TCP,UDP,以及原始 IP 通訊程序很是合適。函數原形也基本符合 Unix socket 標準。編程

Windows 平臺上大多數程序,如 QQ,訊雷等都基於其開發。瀏覽器

ws2_32


ws2_32 是 Winsock 升級版,在兼容的基礎上增長了不符合 Unix socket 標準,但更適合 Windows 平臺的庫函數,通常以 WSA* 開頭。服務器

現代的大多數 Windows 平臺程序也都開始依賴於此庫。網絡

WinInet


WinInet 是 Windows Internet 擴展庫,工做於應用協議層,提供了 http,ftp,gopher 協議的實現,爲基於以上三種協議的程序開發提供基礎平臺。socket

須要說明的是,儘管 WinInet 工做於應用層,但其自己 wininet.dll 實現並不依賴於 winsock.dll 或 ws2_32.dll,而是獨立存在的。至少目前的版本是這樣。基於 WinInet 的應用程序最著名的例子就是IE了。函數

WinHttp


WinHttp 也工做於應用協議層,提供了 http 協議的實現。看起來與 WinInet 有重複的部分,WinHttp 就是爲了替換 WinInet 中的 http 部分的,它更加健壯穩定,並且還爲 http 服務器端開發提供了庫函數。google

若是進行現代 http 開發,建議使用 WinHTTP 而不是 WinInet。使用 WinHTTP 進行開發的著名例子就是 Google 瀏覽器 Chrome,可是 Chrome2.0 之後版本 google 放棄了 winhttp 而是使用了本身開發的 http 庫,這也是爲了使 chrome 實現跨平臺的重要舉措。另外,WinHttp.dll 也不依賴於 winsock或ws2_32,也是獨立運行的。htm

總結


若是基於 socket 編程,Winows 平臺與其它平臺函數基本相同,實現跨平臺比較容易。

若是基於http進行編程的話,不一樣平臺庫差異很大,若是不考慮跨平臺使用 WinHttp,若是考慮跨平臺能夠考慮使用 libwww。

另外,wsock 和 wininet 或 winhttp 也能夠同時使用。

相關文章
相關標籤/搜索