最最基本的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编程通讯了

你可能感兴趣的:(socket基础)