隨著電腦資訊技術的飛速發展,互連網與人類社會的工作、生活越來越緊密相關,它已 經成為人類擷取、交流資訊的重要途徑和手段。所以當前對於開發人員來說,網路編程已是 必備的技能。本執行個體詳細介紹了如何利用Winsock API編寫網路應用程式。
一、實現 方法
在網路編程中最常用的方案便是Client/Server (客戶機/伺服器)模型。在這種 方案中客戶應用程式向伺服器程式請求服務。一個服務程式通常在一個眾所周知的地址監聽 對服務的請求,也就是說,服務進程一直處於休眠狀態,直到一個客戶向這個服務的地址提 出了串連請求。在這個時刻,服務程式被"驚醒"並且為客戶提供服務-對客戶的 請求作出適當的反應。
為了方便這種Client/Server模型的網路編程,90年代初,由 Microsoft聯合了其他幾家公司共同制定了一套WINDOWS下的網路編程介面,即Windows Sockets規範,它不是一種網路通訊協定,而是一套開放的、支援多種協議的Windows下的網路編程 介面。現在的Winsock已經基本上實現了與協議無關,你可以使用Winsock來調用多種協議的 功能,但較常使用的是TCP/IP協議。Socket實際在電腦中提供了一個通訊連接埠,可以通過 這個連接埠與任何一個具有Socket介面的電腦通訊。應用程式在網路上傳輸,接收的資訊都 通過這個Socket介面來實現。
微軟為Visual C++定義了Winsock類如CAsyncSocket類 和派生於CAsyncSocket 的CSocket類,它們簡單易用,讀者朋友當然可以使用這些類來實現 自己的網路程式,但是為了更好的瞭解Winsock API編程技術,我們這裡探討怎樣使用底層的 API函數實現簡單的 Winsock 網路應用程式設計,分別說明如何在Server端和Client端操作 Socket,實現基於TCP/IP的資料傳送,最後給出相關的原始碼。
在VC中進行WINSOCK 的API編程開發的時候,需要在項目中使用下面的三個檔案,否則會出現編譯錯誤。
1 .WINSOCK.H: 這是WINSOCK API的標頭檔,需要包含在項目中。
2.WSOCK32.LIB: WINSOCK API串連庫檔案。在使用中,一定要把它作為項目的非預設的串連庫包含到專案檔 中去。
3.WINSOCK.DLL: WINSOCK的動態串連庫,位於WINDOWS的安裝目錄下。
伺服器端操作 socket(通訊端)
1.在初始化階段調用WSAStartup()
此函數在應用程式中初始化Windows Sockets DLL ,只有此函數調用成功後,應用程式才可 以再調用其他Windows Sockets DLL中的API函數。在程式中調用該函數的形式如下: WSAStartup((WORD)((1<<8|1),(LPWSADATA)&WSAData),其中(1<<8|1) 表示我們用的是WinSocket1.1版本,WSAata用來儲存系統傳回的關於WinSocket的資料。
2、建立Socket
初始化WinSock的動態串連庫後,需要在伺服器端建立一個監 聽的Socket,為此可以調用Socket()函數用來建立這個監聽的Socket,並定義此Socket所使 用的通訊協定。此函數調用成功返回Socket對象,失敗則返回INVALID_SOCKET(調用 WSAGetLastError()可得知原因,所有WinSocket 的API函數都可以使用這個函數來擷取失敗 的原因)。
SOCKET PASCAL FAR socket( int af, int type, int protocol )
參數: af:目前只提供 PF_INET(AF_INET);
type:Socket 的類型 (SOCK_STREAM、 SOCK_DGRAM);
protocol:通訊協定(如果使用者不指定則設為0);
如果要建 立的是遵從TCP/IP協議的socket,第二個參數type應為SOCK_STREAM,如為UDP(資料報)的 socket,應為SOCK_DGRAM。