【网络编程】之一、初识WinSocket
Winsock是Windows下的網(wǎng)絡(luò)編程接口,它是由Unix下的BSD Socket發(fā)展而來(lái),是一個(gè)與網(wǎng)絡(luò)協(xié)議無(wú)關(guān)的編程接口。
? Winsock在常見的Windows平臺(tái)上有兩個(gè)主要的版本,即Winsock1和Winsock2。編寫與Winsock1兼容的程序你需要引用頭文件WINSOCK.H,如果編寫使用Winsock2的程序,則需要引用WINSOCK2.H此外還有一個(gè)MSWSOCK.H頭文件,它是專門用來(lái)支持在Windows平臺(tái)上高性能網(wǎng)絡(luò)程序擴(kuò)展功能的。使用WINSOCK.H頭文件時(shí),同時(shí)需要庫(kù)文件WSOCK32.LIB,使用WINSOCK2.H時(shí),則需要WS2_32.LIB,如果使用MSWSOCK.H中的擴(kuò)展API,則需要MSWSOCK.LIB。正確引用了頭文件,并鏈接了對(duì)應(yīng)的庫(kù)文件,你就構(gòu)建起編寫WINSOCK網(wǎng)絡(luò)程序的環(huán)境了。
OK,下面我們來(lái)看看具體用法:
初始化winsocket
每個(gè)Winsock程序必須使用WSAStartup載入合適的Winsock動(dòng)態(tài)鏈接庫(kù),如果載入失敗,WSAStartup將返回SOCKET_ERROR,這個(gè)錯(cuò)誤就是WSANOTINITIALISED,WSAStartup的定義如下:
[cpp]?view plaincopywVersionRequested指定了你想載入的Winsock版本,其高字節(jié)指定了次版本號(hào),而低字節(jié)指定了主版本號(hào)。你可以使用宏MAKEWORD(x, y)來(lái)指定版本號(hào),這里x代表主版本,而y代表次版本。lpWSAData是一個(gè)指向WSAData結(jié)構(gòu)的指針,WSAStartup會(huì)向該結(jié)構(gòu)中填充其載入的Winsock動(dòng)態(tài)鏈庫(kù)的信息。
lpWSAData是一個(gè)指向WSAData結(jié)構(gòu)的指針,WSAStartup會(huì)向該結(jié)構(gòu)中填充其載入的Winsock動(dòng)態(tài)鏈庫(kù)的信息。
[cpp]?view plaincopy當(dāng)你使用完Winsock接口后,要調(diào)用下面的函數(shù)對(duì)其占用的資源進(jìn)行釋放:
??? int WSACleanup(void);
如果調(diào)用該函數(shù)失敗也沒有什么問題,因?yàn)椴僮飨到y(tǒng)為自動(dòng)將其釋放,對(duì)應(yīng)于每一個(gè)WSAStartup調(diào)用都應(yīng)該有一個(gè)WSACleanup調(diào)用.
錯(cuò)誤處理:
Winsock函數(shù)調(diào)用失敗大多會(huì)返回 SOCKET_ERROR(實(shí)際上就是-1),你可以調(diào)用WSAGetLastError得到錯(cuò)誤的詳細(xì)信息:
[cpp]?view plaincopy
下面是來(lái)自msdn的示例:
[cpp]?view plaincopy
這里只是初識(shí)winsocket!大概了解一下!
2012/8/14
jofranks 于南昌
總結(jié)
以上是生活随笔為你收集整理的【网络编程】之一、初识WinSocket的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据库脱机和分离的区别
- 下一篇: 【网络编程】之二、socket API学