本代码用于和第二章服务端代码一致,监听12345端口,可以不断的发送消息,直至输入"quit"退出程序,完整参考代码如下:
#include <winsock2.h> #include <stdio.h> #pragma comment(lib,"ws2_32.lib") int main() { int err; char SendBuf[100]; WORD versionRequired; WSADATA wsaData; versionRequired=MAKEWORD(2,2); err=WSAStartup(versionRequired,&wsaData);//协议库的版本信息 //通过WSACleanup的返回值来确定socket协议是否启动 if (!err) { printf("客户端套接字已经打开!\n"); } else { printf("客户端套接字打开失败!\n"); return -1;//结束 } //注意socket这个函数,他三个参数定义了socket的所处的系统,socket的类型,以及一些其他信息 SOCKET clientSocket=socket(AF_INET,SOCK_STREAM,0); //socket编程中,它定义了一个结构体SOCKADDR_IN来存计算机的一些信息,像socket的系统, //端口号,ip地址等信息,这里存储的是服务器端的计算机的信息 SOCKADDR_IN clientsock_in; clientsock_in.sin_addr.S_un.S_addr=inet_addr("127.0.0.1"); clientsock_in.sin_family=AF_INET; clientsock_in.sin_port=htons(12345); //前期定义了套接字,定义了服务器端的计算机的一些信息存储在clientsock_in中, //准备工作完成后,然后开始将这个套接字链接到远程的计算机 //也就是第一次握手 int r=connect(clientSocket,(SOCKADDR*)&clientsock_in,sizeof(SOCKADDR));//开始连接 // printf("%d\n",r); while(1) { gets(SendBuf); if(strcmp(SendBuf,"quit")==0) break; send(clientSocket,SendBuf,strlen(SendBuf)+1,0); } closesocket(clientSocket); //关闭服务 WSACleanup(); return 0; }
单独运行客户端,如下图效果:
若是连同前面的服务端一起测试,先运行服务端,再运行客户端,即可完成通信效果,效果图下:
从图中可以看到,客户端向服务端发送三条消息,服务端都已接收,并打印长度和消息信息,第四条信息退出,之后双方退出结束程序
本文固定URL:https://www.dotcpp.com/course/794