Socket套接字编程--CSocket类简单介绍

时间:2021-03-03 11:03:58

Windows网络程序开发均是基于Windows套接字实现的,介绍下CSocket类编程的基本流程。

1.创建套接字

CSocket sock;//通过构造函数创建套接字对象

2.绑定地址信息

将套接字对象与服务器地址信息绑定在一起。

/*结构体详细信息
struct in_addr
{
	union
	{
		struct
		{
			unsigned char s_b1, s_b2, s_b3, s_b4;
		}S_un_b;//用4个u_char字符描述IP地址
		struct
		{
			unsigned short s_w1, s_w2;
		}S_un_w;//用2个u_short类型描述IP地址
		unsigned long S_addr;//用1个u_long类型描述IP地址---
	}S_un;
};

struct sockaddr_in
{
	short			sin_family;//指定地址家族即地址格式
	unsigned		sin_port;//端口号码
	struct in_addr	sin_addr;//IP地址
	char			sin_zero[8];//需要指定为0
};
*/
sockaddr_in addr;//定义套接字地址结构变量
addr.sin_family = AF_INET;//地址家族TCP/IP
addr.sin_port = htons(80);//端口号
addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//字符串IP->网络字节IP
sock.Bind((SOCKADDR*)addr,sizeof(addr));//调用成功返回true;否则,返回false

在服务器端,当地址信息绑定套接字成功后,还需要在指定端口监听客户端的连接请求。

sock.Listen(5);//监听端口,默认5个,也是最大数量

3.连接服务器

客户端创建套接字成功后,可以向服务器发送连接请求。

CSocket sock;
sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(80);
addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
sock.Connect((SOCKADDR*)addr,sizeof(addr));//连接服务器,成功返回true

4.数据交换

无论是服务器,还是客户端都通过函数Send()和Receive()进行数据交换。

char buff[] = 'a';//定义并初始化数据缓冲区
sock.Send(&buff,sizeof(buff),0);//发送数据缓冲区中的数据
sock.Receive(&buff,sizeof(buff),0);//接收数据并将数据存放在数据缓冲区中

5.关闭套接字对象

当服务器和客户端的通信完成以后,必须将套接字对象关闭。

sock.Close();//关闭套接字对象