?? d070.bmp.txt
字號:
函數進行重載,用戶可以在應用程序中很方便地對套接字發送、接收數據等事件進行處理。
3.2實例4:Winsock API編程技術——基于Winsock的聊天室程序
為了讓讀者能快速、靈活地實現Winsock API編程,本節首先介紹Winsock API的基本
函數,然后以一個聊天室的實例來對這些知識進行總結,并在最后對該實例進行延伸和擴展,
將Winsock API封裝成一個類,并基于該類重寫了聊天室的程序,以便使讀者能靈活運用。
3.2.1 Winsock基本的API
主要的系統調用函數如下所示。
●socket():創建Socket。
●bind():將創建的Socket與本地端口綁定。
●connect():與accept()-建立Socket連接。
●listen():服務器監聽是否有連接請求。
●send():數據的可控緩沖發送。
●recv():可控緩沖接收。
●closesocket():關閉Socket。
以下便是Socket API的基本調用,附帶的源碼均為后續章節的核心代碼。
1.Winsock的啟動
Winsock是由DLL形式提供的模型,為了完成一系列初始化操作,每個Winsock的應
用程序都必須調用WSAStartup0.以建立與Windows Sockets DLL盼連接。
WSAStartup的函數原型為:
int WSAStartup( WORD wVersionRequested, LPWSADATA lpWSAData);
其中,wVersionRequested表示本程序所需要的最低版本號。lpWSAData返回WSADATA
結構,說明WinSock庫當前的實現細節。
該函數成功時返回0,否則可能返回如下一些錯誤碼:
●WSASYSNOTREADY,表示底層網絡系統未準備好。
●WSAVERNOTSUPPORTED,表示所要求版本號本實現不支持。
●WSAEINPROGRESS,表示一個阻塞性套接字操作未完成。
●WSAEPROCLIM,表示達到當前實現所支持的最大任務數。
●WSAEFAULT,表示lpWSAData是一個非法指針。
一般用戶可以不去關心實現細節,只要當前實現庫滿足最低版本需求即可。
2.創建套接字
每個套接字任務都從創建套接字開始。我們可以用socket函數來創建套接字,該函數的
原型為: 。
70
SOCKET socket( int a£int type, int protocol)
其中,af為地址族..說明該socket支持的地址類型。我們可以在文件winsock2.h中找
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -