記錄學習windows網路程式設計過程中遇到的問題和相關筆記
socket起源於unix,socket是應用層與tcp/ip協議族通訊的中間軟體抽象層,它是一組介面。基於"開啟—讀/寫—關閉"模式,其中winsock就是變種之一
以下是乙個典型的c/s中使用套接字介面的概述:
winsock是windows平台下的網路程式設計介面,它是基於unix下的bsd socket發展而來,是乙個與網路協議無關的程式設計介面。
winsock目前有兩個版本:
winsock 1: windows ce平台支援; 標頭檔案:winsock.h ; lib庫:wsock32.lib
winsock 2: 部分平台不支援。通過字首wsa可以區別於winsock 1版本。個別函式如wsastartup、wsacleanup、wsarecvex、wsagetlasterror都屬於winsock 1.1規範的函式; 標頭檔案:winsock2.h; lib庫:ws2_32.lib
初始化winsock:所有需要呼叫winsock函式的程式都必須初始化winsock,同時確保winsock支援該系統
#define win32_lean_and_mean
#endif
#include #include #include #include #include #pragma comment(lib, "ws2_32.lib")
int main()
wsacleanup();
return 0;
}wsastartup()函式使用合適的的winsock動態鏈結庫,成功就返回0
_in_ word wversionrequested,
_out_ lpwsadata lpwsadata
);wversionrequested指定了你想載入的winsock版本,其高位元組指定了次版本號,而低位元組指定了主版本號。可以使用巨集makeword(x, y)來指定版本號,這裡x代表主版本,而y代表次版本。lpwsadata是乙個指向wsadata結構的指標,wsastartup會向該結構中填充其載入的winsock動態鏈結庫
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呼叫.
Winsock程式設計基礎1
1 載入和釋放winsoke庫 所有winsock函式都是從ws2 32.dll匯出,包含相應庫檔案 include pragma comment lib,ws2 32 若沒有載入,呼叫scok函式返回的socket error出錯 為wsanotinitialised intwsastartup ...
Winsock程式設計入門 1
一 簡單的tcp伺服器 介紹 winsock api是一套供microsoft windows作業系統使用的套接字程式庫,它最初基於berkeley套接字,但是其中加入了一些microsoft的特殊改動。在這篇文章中,我要試著給你介紹如何使用winsock來進行套接字程式設計,並假設你沒有在任何作業...
Winsock程式設計筆記 1
tcp ip統一規定使用大尾方式傳輸資料,即網路位元組序 intel amd的計算機一般都是小尾方式儲存資料 所以當計算機想通過網路傳輸一串資料給另一台計算機時,都會經歷如下過程的轉換 1.inet addr是把由小數點分割的ip位址字串轉成由32位二進位制表示的網路位元組序ip位址 ip字串 32...