寫這個主要是計網用到了,整理一下,大概寫三篇,一篇寫那些數據類型,一篇寫函數介紹,最後一篇寫一下多線程編程
也不知道能不能幫到之後和我一樣小白的學弟學妹
首先是WSADATA
typedef struct WSAData {
WORD wVersion;
WORD wHighVersion;
#ifdef _WIN64
unsigned short iMaxSockets;
unsigned short iMaxUdpDg;
char *lpVendorInfo;
char szDescription[WSADESCRIPTION_LEN+1];
char szSystemStatus[WSASYS_STATUS_LEN+1];
#else
char szDescription[WSADESCRIPTION_LEN+1];
char szSystemStatus[WSASYS_STATUS_LEN+1];
unsigned short iMaxSockets;
unsigned short iMaxUdpDg;
char *lpVendorInfo;
#endif
} WSADATA, *LPWSADATA;
其中我感覺比較重要的是
iMaxSockets 單個進程能夠打開的socket的最大數目
iMaxUdpDg WindowsSockets應用程序能夠發送或接收的最大的用戶數據包協議(UDP)的數據包大小,以字節爲單位
還有一個函數WSAStartup()
當一個應用程序調用WSAStartup函數時,操作系統根據請求的Socket版本來搜索相應的Socket庫,然後綁定找到的Socket庫到該應用程序中。以後應用程序就可以調用所請求的Socket庫中的其它Socket函數了。該函數執行成功後返回0。
int ErrCode = WSAStartup(MAKEWORD(2, 2), &WSAdata);
這個2.2是指這個程序要使用2.2版本的socket
SOCKET是一個套接字,連接的一端叫做socket,可以看做是一個整型數字,這個我也不大清楚
sockaddr_in
struct sockaddr_in {
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
sin_port 16位TCP/UDP端口號
in_addr 32位IP地址
sin_family 地址族
雖然我不知道地址族是個啥...
sin_port和sin_addr都必須是網絡字節序(NBO),一般可視化的數字都是主機字節序(HBO)。 所以需要通過函數進行轉化 htons()
這三個基本的數據類型就可以實現最最基本的socket編程通訊了