本代码用于和第二章服务端代码一致,监听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; }
单独运行客户端,如下图效果:
若是连同前面的服务端一起测试,先运行服务端,再运行客户端,即可完成通信效果,效果图下:
从图中可以看到,客户端向服务端发送三条消息,服务端都已接收,并打印长度和消息信息,第四条信息退出,之后双方退出结束程序
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程