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();//关闭套接字对象