最最基本的socket編程基礎(c++) 一

寫這個主要是計網用到了,整理一下,大概寫三篇,一篇寫那些數據類型,一篇寫函數介紹,最後一篇寫一下多線程編程

也不知道能不能幫到之後和我一樣小白的學弟學妹

首先是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編程通訊了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章