C6385:从“buffer”中读取的数据无效: 可读大小为“recv()`72”个字节,但可能读取了“25”个字节。

2023-10-26

C++网络编程中接收结构体对象遇到的问题

想从客户端发送一个结构体对象到服务器。在网上查询后发现可以在客户端用memcpy把结构体拷贝到字符串上发送给客户端,再在客户端把字符串转化为结构体。具体代码如下:

结构体:

typedef struct Player {
	char name[20];
	char total[5];
}Player;

客户端:

Player p1;
strcpy(p1.name, "wyz");
strcpy(p1.total, "100");
char buffer[25];
memset(buffer, 0, sizeof(buffer));
memcpy(buffer, &p1, sizeof(p1));
send(client_socket, buffer, sizeof(buffer), 0);

服务器:

Player play;
char buffer[25];
memset(buffer, 0, sizeof(buffer));
recv(client_socket, buffer, sizeof(buffer), 0);
memcpy(&play, buffer, sizeof(play));

然后遇到警告:
C6385:从“buffer”中读取的数据无效: 可读大小为“recv()`72”个字节,但可能读取了“25”个字节。

测试发现recv的返回值为25,着实不知道这个72字节哪来的。
网上查询也无果。
突然想尝试下将recv的返回值设置为memcpy的第三个参数会怎么样,于是改进代码:

Player play;
char buffer[25];
memset(buffer, 0, sizeof(buffer));
int x = recv(client_socket, buffer, sizeof(buffer), 0);
memcpy(&play, buffer, x);

然后警告莫名其妙就没了,明明recv的返回值和sizeof(buffer)的值是一样的,都为25,为什么这样写警告就没了呢?

希望有大神能帮忙解答一下。也希望能帮助遇到同样问题的朋友。
PS:用的IDE是VS 2019

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C6385:从“buffer”中读取的数据无效: 可读大小为“recv()`72”个字节,但可能读取了“25”个字节。 的相关文章

  • TFS API - 缓慢的 foreach 变更集迭代

    问题背景 我正在使用 TFS api 查询 TFS 服务器上的大范围 1 600 文件 我从每个文件中收集其所有 ChangesetId 然后将其收集在列表中 代码 这是我正在使用的代码 它可以正确生成 QueryHistory 方法中指定
  • C# 锁(mylocker) 不起作用

    我有很多 Web 服务调用 异步 在回调中 我会将结果绘制到 Excel 中 我想同步绘图方法 所以我使用以下内容 但是 从我在 Visual Studio 中追踪到 每次 lock locker 都会成功 并且有许多线程运行clearco
  • C++11 中具有 C 链接的复杂类型

    我需要将 C 库的标头包含到我的 C 11 代码中 现在 标头提供了涉及大量的例程和数据结构double complex到处都是 例如 include
  • 确保 unsigned int/long 始终在 C# 中的检查上下文中执行

    有没有人觉得奇怪 uint 和 ulong 的默认上下文是未检查的 而不是检查的 因为它们旨在表示永远不能为负的值 因此 如果某些代码试图违反该约束 在我看来 自然且首选的行为是抛出异常 而不是返回最大值 这很容易使重要数据处于无效状态并且
  • 从 C++ 中的函数返回二维数组[重复]

    这个问题在这里已经有答案了 可能的重复 C 从函数返回多维数组 https stackoverflow com questions 3716595 c returning multidimension array from function
  • 为什么数组不可赋值? [复制]

    这个问题在这里已经有答案了 据我所知 C 标准禁止使用数组作为可修改的左值 即在赋值的左侧 int lhs 4 rhs 4 0 1 2 3 lhs rhs illegal 现在 我一直想知道为什么会这样 我可以看到上面的语句 以及写入数组的
  • 如何修复 TcpClient Ip 标头错误校验和

    我正在使用 System Net Sockets TcpClient 类 但每当我通过网络发送自定义数据包时 我都会在wireshark捕获上看到错误的校验和 我该如何修复它 问题是您在网络接口上设置了校验和卸载 这会导致您的网卡计算校验和
  • MouseDoubleClick 事件不会冒泡

    我的场景经过简化 我有一个包含员工行的 ListView 在每个员工行中 都有 增加 和 减少 按钮来调整他的工资 假设在我的程序中 双击 员工 行意味着 解雇此人 The problem是当我快速单击 增加 时 这会触发 ListView
  • C++中的虚方法表存放在哪里?

    我想知道类对象 不是实例 而是类 如何存储在内存中 class A public int a virtual void f virtual A class B public A public int b void f final overr
  • cmake 包括其他目录中的 h 文件

    我在 cmake 项目下进行测试时遇到问题 我的项目是这样安排的 TerrainMap PointAccumulator heightQuadGrid Test 在 TerrainMap 目录中 CMakeLists txt 文件简单地概述
  • 为什么.net中的数组只实现IEnumerable而不实现IEnumerable

    我正在实现自己的 ArrayList 类 当我意识到这一点时 我感到很惊讶 public System Collections Generic IEnumerator
  • 随机排列

    我无法找到一种随机洗牌元素的好方法std vector经过一些操作后 恢复原来的顺序 我知道这应该是一个相当简单的算法 但我想我太累了 由于我被迫使用自定义随机数生成器类 我想我不能使用std random shuffle 无论如何这没有帮
  • 当一种语言是另一种语言的平行超集时,这意味着什么?

    我正在阅读关于实时并发 C 的期刊文章 http link springer com article 10 1007 2FBF00365999 并且它在摘要中提到 因此你们中的任何人都可以通过该链接查看上下文 Concurrent C 是
  • 如何查明我的字符串是否包含“micro”Unicode 字符?

    我有一个包含实验室数据的 Excel 电子表格 如下所示 g L ppb 我想测试希腊字母 是否存在 如果发现我需要做一些特别的事情 通常 我会写这样的东西 if cell StartsWith matchSequence lt unive
  • 初始化二维数组时出现分段错误

    我已经检查过我的代码是否正确地划分了内存空间 但是一旦我尝试将 2D 数组初始化为某些值 然后对这些值求和 我就会在 2x2 数组上收到分段错误 我想最终将我的代码扩展到更大的数组 但我什至无法让它在这里工作 我知道有很多关于 malloc
  • 如何重写(重新实现)QFileSystemModel 中的成员函数

    我已经为此苦苦挣扎了一段时间 Qt s QFileSystemModel由于图标获取算法非常糟糕 在获取数百个文件时速度非常慢 我想完全禁用图标 它们被提取到QFileSystemModel data方法不是虚拟的 QFileSystemM
  • 有没有办法将复选框列表绑定到 asp.net mvc 中的模型

    我在这里寻找一种快速简便的方法来在模型中发生回发时绑定复选框列表项的列表 显然现在常见的做法似乎是这样的form GetValues checkboxList 0 Contains true 这看起来很痛苦而且不太安全 有没有一种方法可以绑
  • 在 C# 中设置风扇速度

    我知道以前有人问过这个问题 但我似乎无法让它发挥作用 我已调用以下内容 using System Management using System Management Instrumentation using System Runtime
  • Eclipse CDT C/C++:包含另一个项目的头文件

    我在 Eclipse CDT 中有两个 C 项目main and shared In shared我有一个名为calc h 我想在中使用这个标头main 所以我做了以下事情 added include calc h到相关文件main In
  • Image.Save 异常“GDI+ 中发生一般错误。”保存到 MemoryStream 时

    我有一个服务器客户端应用程序 我想从服务器获取屏幕截图 但在线bitmap Save ms System Drawing Imaging ImageFormat Png 我得到这个例外 A generic error occurred in

随机推荐

  • Awt+Swing+Mysql实现超市商品交易管理系统(含全部代码)

    目录 成果展示 数据库表格准备 绘制窗体以及组件 主窗体 登录面板 上架商品面板 下架商品面板 操作商品面板 数据面板 展示表格 关键技术与思路 与数据库建立连接 对数据库数据进行增删改 查询数据 验证状态 切换面板与点击触发事件 全部代码
  • 单片机多字节串口接收(转)

    转自 http bbs ednchina com BLOG ARTICLE 3007162 HTM 工作了一年多 写了不少单片机串口程序 感觉串口多字节接收部分的逻辑相对于配置寄存器跟串口回复来说 是有点难度的 寄存器配置基本上都是死的 串
  • linux如何查看内存?

    linux查看内存的方法 1 通过 proc meminfo 方法查看内存 2 使用free命令查看内存 3 使用ps命令显示各个进程的内存使用情况 4 通过top命令显示每个进程的内存实时使用率 1 查看RAM使用情况最简单的方法是通过
  • unity 模拟相机云台效果-物体指定轴不受父节点影响

    物体指定轴的世界坐标旋转值不随父节点改变 using System Collections using System Collections Generic using UnityEngine
  • error: #40: expected an identifier

    错误指向stm32f10x h typedef enum FALSE 0 TRUE FALSE bool 原因是在其他文件中重复 define了FALSE 的值 将其注释掉即可
  • 三面(技术+HR面试)网易,分享我的面试经验!(已拿offer)

    前言 Java后端面试标准其实不复杂 第一能干活 第二Java基础要好 第三最好熟悉些分布式框架 其实 很多面试者能力其实不差 但面试时没准备或不会说 这样的人可能在进团队干活后确实能达到期望 但可能就无法通过面试 但面试官总是只根据面试情
  • DRM驱动代码分析:图层参数更新

    前言 无业居家 闭门造车 非常欢迎大家帮忙指正 有些代码流程是看代码分析的 没有去验证是否正确 我对DRM框架的很多东西都不了解 所以有些地方会比较生硬 熟悉学习需要时间 文章一直堆在草稿箱可能会降低我的积极性 所以我还是先发布了文章 后面
  • JavaSE之注释规范、文档注释及注解

    Java中的注释不会出现在可执行程序中 有三种标记注释的方式 1 单行注释 2 多行注释 3 文档注释 一 注释可以帮助我们更清晰地阅读代码 了解代码 在 阿里巴巴Java开发手册中 也对注释作了规约 注释规约如下 1 强制 类 类属性 类
  • RuntimeException

    运行时异常可以理解为 隶属于开发者的问题 代码有bug肯定要开发者自己修正啊 处理RuntimeException 不是try catch能解决的 try catch在这里使用毫无意义 编译时异常可以理解为 隶属于用户的问题 用户用的时候没
  • Java Timer定制每天特定时间执行任务

    package com segsec gisap import java util Calendar import java util Date import java util Timer import java util TimerTa
  • JVM垃圾回收器 七种经典垃圾回收器

    文章目录 垃圾回收器概述 评估GC的性能指标 吞吐量 throughput 暂停时间 pause time 七种经典的垃圾回收器 垃圾收集器组合关系 Serial回收器 串行回收 ParNew回收器 并行回收 Parallel Scaven
  • 【华为OD机试 2023】 网上商城优惠活动 / 模拟商场优惠打折II(C++ Java Javascript Python)

    华为od机试题库 华为OD机试2022 2023 C Java JS Py https blog csdn net banxia frontend category 12225173 html 华为OD机试2023最新题库 更新中 C Ja
  • 阿里云NAS文件存储基本介绍与购买使用

    文章目录 1 NAS文件存储基本概念 1 1 什么是NAS文件存储 1 2 NAS的应用场景 1 3 NAS OSS EBS的区别 2 购买NAS文件存储 2 1 开通NAS服务 2 2 创建NAS文件系统 2 3 配置NAS文件系统属性
  • Docker Harbor 私有镜像仓库的部署和管理

    目录 一 什么是Harbor 二 Harbor的特性 三 Harbor的构成 四 部署配置Docker Harbor 首先需要安装 Docker Compose 服务 部署 Harbor 服务 修改配置文件 docker配置文件添加本地仓库
  • 蚁群算法(ACO)分析总结(Matlab+C#模拟解决TSP旅行商问题)

    蚁群算法 1 1 简介 1 2 整体框架 1 3 蚁群算法的基本要素 1 3 1 信息素的正反馈机制 1 3 2 信息素的更新策略 1 3 3 算法停止准则 1 4 蚂蚁个体的建模问题 1 5 蚁群算法的重要参数 1 6 蚁群算法的基本流程
  • 怎么判断私网地址_如何判断一个IP地址是私有地址

    如何判断一个IP地址是私有地址 首先 我们得先了解什么是私有地址 本文所指的IP地址 皆是IPV4 一个IPV4地址 由四段组成 最大值为255 一个IP地址其实就是一个32位的bit串 每8位一段 所谓私有地址 就是非注册地址 只能做内网
  • char数组和指针问题

    这个问题是C 基础问题中相当折腾人的一个 死记硬背解决不了根本问题 记住还是要忘 需要仔细研究其本质 这两种方式就是数组和指针的方式 char a 6 abcde char b abcde 第一行声明了并初始化了一个char数组 第二行是声
  • 从传统软件开发到云原生转型:大数据和AI如何引领软件开发的新趋势

    文章目录 1 数据驱动的开发 2 智能化的用户体验 3 云原生的可扩展性 4 实时处理和决策 5 自动化和效率提升 6 持续集成和交付的加速 7 数据安全和隐私 8 持续学习和创新 个人主页 程序员 小侯 CSDN新晋作者 欢迎 点赞 评论
  • C语言:IP地址

    题目 include
  • C6385:从“buffer”中读取的数据无效: 可读大小为“recv()`72”个字节,但可能读取了“25”个字节。

    C 网络编程中接收结构体对象遇到的问题 想从客户端发送一个结构体对象到服务器 在网上查询后发现可以在客户端用memcpy把结构体拷贝到字符串上发送给客户端 再在客户端把字符串转化为结构体 具体代码如下 结构体 typedef struct