本代码用于和第二章服务端代码一致,监听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;
}

单独运行客户端,如下图效果:

客户端运行效果图


若是连同前面的服务端一起测试,先运行服务端,再运行客户端,即可完成通信效果,效果图下:

Socket通信效果图

从图中可以看到,客户端向服务端发送三条消息,服务端都已接收,并打印长度和消息信息,第四条信息退出,之后双方退出结束程序

点赞(0)

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

Dotcpp在线编译      (登录可减少运行等待时间)