在Windows平台进行网络程序开发, 可以使用不同的库, 但是最常用的还是微软自己开发的库。具体说来,有:
(1)Winsock,工作于网络层和传输层的开发库,对于编写TCP,UDP,以及原始IP通信程序非常合适。函数原形也基本符合Unix socket标准。Windows平台上的大多数程序,如QQ,讯雷等都基于其开发。
(2)ws2_32,是Winsock的升级版本,在兼容的基础上增加了不符合Unix socket标准,但更适合Windows平台的库函数,一般以WSA*开头。
现代的大多数Windows平台程序也都开始依赖于此库。
(3)WinInet,Windows Internet扩展库,工作于应用协议层,提供了http,ftp,gopher协议的实现,为基于以上三种协议的程序开发提供基础平台,需要说明的是,尽管WinInet工作于应用层,但其本身wininet.dll的实现并不依赖于winsock.dll或ws2_32.dll,而是独立存在的。至少目前的版本是这样。基于WinInet的应用程序最著名的例子就是IE了。
(4)WinHttp,也是工作于应用协议层,提供了http协议的实现。看起来与WinInet有重复的部分,没错,WinHttp就是为了替换WinInet中的http部分的,它更加健壮稳定,而且还为http服务器端开发提供了库函数。如果进行现代http的开发,建议使用WinHTTP而不是WinInet。使用WinHTTP进行开发的著名例子就是Google的浏览器Chrome,但是Chrome2.0以后版本google放弃了winhttp而是使用了自己开发的http库,这也是为了使chrome实现跨平台的重要举措。另外,WinHttp.dll也不依赖于winsock或ws2_32,也是独立运行的。
如果基于socket编程的话,Winows平台与其它平台函数基本相同,实现跨平台比较容易。
如果基于http进行编程的话,不同平台库差别很大,如果不考虑跨平台使用WinHttp,如果考虑跨平台可以考虑使用libwww。
另外,wsock和wininet或winhttp也可以同时使用。