WinSock網絡編程基礎(1)

記錄學習windows網絡編程過程當中遇到的問題和相關筆記編程

 

基本概念:

 

Socket:

socket起源於UNIX,Socket是應用層與TCP/IP協議族通訊的中間軟件抽象層,它是一組接口。基於"打開—讀/寫—關閉"模式,其中WinSock就是變種之一windows

 

如下是一個典型的C/S中使用套接字接口的概述:網絡

 

WinSock:

WinSock是Windows平臺下的網絡編程接口,它是基於Unix下的BSD Socket發展而來,是一個與網絡協議無關的編程接口。併發

WinSock目前有兩個版本:app

 

Winsock 1: Windows CE平臺支持; 頭文件:WinSock.h ; lib庫:wsock32.libsocket

 

Winsock 2: 部分平臺不支持。經過前綴WSA能夠區別於Winsock 1版本。個別函數如WSAStartup、WSACleanup、WSARecvEx、WSAGetLastError都屬於Winsock 1.1規範的函數; 頭文件:WinSock2.h; lib庫:ws2_32.libtcp

 

初始化WinSock:全部須要調用WinSock函數的程序都必須初始化WinSock,同時確保winsock支持該系統函數

#ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN #endif #include <windows.h> #include <WinSock2.h> #include <WS2tcpip.h> #include <IPHlpApi.h> #include <stdio.h> #pragma comment(lib, "Ws2_32.lib") int main() { WSADATA wsaData; int iResult; iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); if (iResult != 0) { printf("WSAStartup failed: %d\n", iResult); return 1; } WSACleanup(); return 0; }

 

WSAStartup()函數使用合適的的winsock動態連接庫,成功就返回0學習

int WSAStartup( _In_ WORD wVersionRequested, _Out_ LPWSADATA lpWSAData );

 

wVersionRequested指定了你想載入的Winsock版本,其高字節指定了次版本號,而低字節指定了主版本號。能夠使用宏MAKEWORD(x, y)來指定版本號,這裏x表明主版本,而y表明次版本。lpWSAData是一個指向WSAData結構的指針,WSAStartup會向該結構中填充其載入的Winsock動態連接庫ui

 

WSADATA結構:

typedef struct WSAData { WORD wVersion; WORD wHighVersion; char szDescription[WSADESCRIPTION_LEN+1]; char szSystemStatus[WSASYS_STATUS_LEN+1]; unsigned short iMaxSockets; unsigned short iMaxUdpDg; char FAR *lpVendorInfo; } WSADATA, *LPWSADATA; 

wVersion爲你將使用的Winsock版本號,wHighVersion爲載入的Winsock動態庫支持的最高版本,它們的高字節表明次版本,低字節表明主版本。

 

szDescription與szSystemStatus由特定版本的Winsock設置

 

iMaxSockets表示最大數量的併發Sockets,其值依賴於可以使用的硬件資源。


iMaxUdpDg表示數據報的最大長度;然而,獲取數據報的最大長度,須要使用WSAEnumProtocols對協議進行查詢。


lpVendorInfo是爲Winsock實現而保留的製造商信息,這個在Windows平臺上並無什麼用處.

 

Windows 95之後的操做系統都支持Winsock 2.2的版本.

 

WSACleanup() :對佔用的資源進行釋放,若是調用該函數失敗,操做系統爲自動將其釋放,對應於每個WSAStartup調用都應該有一個WSACleanup調用.

 原文連接: http://www.bugcoding.com/entry/9

相關文章
相關標籤/搜索