本代码用于和第二章服务端代码一致,监听12345端口,可以不断的发送消息,直至输入"quit"退出程序,完整参考代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | #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、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程