当前位置:网站首页 > C++编程 > 正文

gmock(Gmock顺序返回值)



熟悉TCP协议下通信程序的编写,编译和执行

模拟实现TCP协议通信过程,要求编程实现服务器端与客户端之间双向数据传递。客户端向服务器端发送“我是XX专业学生”,服务器回应“我也是XX专业学生”。

【提示:服务器端创建监听套接字,并为它关联一个本地地址(指定IP地址和端口号),然后进入监听状态准备接受客户的连接请求。为了接受客户端的连接请求,服务器端必须调用accept函数。客户端创建套接字后即可调用connect函数去试图连接服务器监听套接字。当服务器端的accept函数返回后,connect函数也返回。此时客户端使用socket函数创建的套接字,服务器端使用accept函数创建的套接字,双方实现通信。】

操作系统: Microsoft Windows 11

编程环境:Visual Studio 2022

1、首先创建一个c++空项目用于Winsock编程,项目名称为Server

在这里插入图片描述
在这里插入图片描述
然后在解决方案中新建一个客户端的c++空项目




在这里插入图片描述
在这里插入图片描述
创建完成后结构如下:




在这里插入图片描述

2、Winsock库的载入与释放

由于每次写网络程序都必须编写代码载入和释放Winsock库,为了方便管理封装一个CInitSock类来管理Winsock库。

下面代码使用initsock.h头文件来保存,并将其拷贝到服务器和客户端

 
  

代码解释:

类的构造函数会自动调用,完成对库的初始化,使得后续的、、、等函数可以正常工作。

在程序结束时,对象的析构函数会自动调用,清理库的资源,确保程序退出时没有残留的资源占用。

3、服务器与客户端代码实现

服务器
 
  
客户端
 
  

最终的项目结构为:

在这里插入图片描述

实验结果展示

在这里插入图片描述

报错原因是因为有些函数已被弃用,当开启sdl附加安全检查时编译器会将此警告升级为错误。

分别右键服务器和客户端点击属性,找到C/C++关闭SDL检查

在这里插入图片描述

重新生成解决方案,编译成功

在这里插入图片描述
首先运行服务器端

在这里插入图片描述

然后再运行客户端

在这里插入图片描述
成功实现了服务器端与客户端之间双向数据传递

4、程序工作流程示意图

在这里插入图片描述

5、代码相关函数介绍

1.套接字的创建和关闭
 
  
参数 说明 af socket 使用的地址格式 type 指定套接字的类型 protocol 指定使用的协议类型

在Winsock中地址格式只支持AF_INET,套接字类型和对应的协议类型有以下几种:

套接字类型使用的值 套接字类型 协议字段 说明 SOCK STREAM 流式套接字 IPPROTO_TCP 使用TCP提供有连接的可靠的传输 SOCK DGRAM 数据报套接字 IPPROTO_UDP 使用UDP提供无连接的不可靠的传输 SOCK RAW 原始套接字 IPPROTO_RAW
IPPROTO_ICMP 不使用某种特定的协议去封装它,而是由程序自行处理数据报以及协议首部


关闭套接字

 
  
2.绑定套接字到指定IP地址和端口
 
  
3.设置套接字进入监听状态
 
  
4.接受连接请求

如果客户端想要与服务器建立一条 TCP 连接,需要使用 connect() 函数

 
  
 
  

该函数在s上取出未处理连接中的第一个连接,然后为这个连接创建新的套接字,返回它的句柄。新创建的套接字是处理实际连接的套接字,它与 s 有相同的属性。

5.收发数据

对于流式套接字来说,一般使用send和recv函数来收发数据

 
  
 
  

连接的套接字,它与 s 有相同的属性。

5.收发数据

对于流式套接字来说,一般使用send和recv函数来收发数据

 
  
 
  

在阻塞模式下,send 将会阻塞线程的执行直到所有的数据发送完毕(或者发生错误),而 recv 函数将返回尽可能多的当前可用信息,直到达到缓冲区指定的大小。

到此这篇gmock(Gmock顺序返回值)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • kubelet不断重启(kubectl重启)2026-03-28 20:27:08
  • c++单向链表冒泡(c++单链表反转三种方法)2026-03-28 20:27:08
  • codependence翻译成中文(code翻译成中文意思)2026-03-28 20:27:08
  • 返回上级目录cd(返回上级目录快捷键)2026-03-28 20:27:08
  • ceph存储容量计算(ceph存储对osd做参数设置一般用哪个命令)2026-03-28 20:27:08
  • -bash:unzip:未找到命令(unzip未找到命令centos)2026-03-28 20:27:08
  • console线和串口线(console线接口定义)2026-03-28 20:27:08
  • gmock使用案例(gmock invoke)2026-03-28 20:27:08
  • Ubuntu源码下载gzip(ubuntu源码安装gcc)2026-03-28 20:27:08
  • mt103报文72(MT103报文72场常用代码ACC/INS是什么意思)2026-03-28 20:27:08
  • 全屏图片