首页 > 其他分享 >udp通信中变长结构体的存在意义?

udp通信中变长结构体的存在意义?

时间:2023-09-14 19:04:19浏览次数:32  
标签:中变长 udp 通信 UDP 分配内存 数组 大小 接收 数据

在UDP通信中,使用变长结构体(又称为灵活数组成员)的存在意义是为了在不固定大小的数据报中传输可变长度的数据。


在你的示例中,结构体定义了一个变长结构体,其中包含一个整型变量 `size` 和一个大小为0的字符数组 `data`。通过将字符数组大小设置为0,你可以根据实际数据的长度在运行时分配足够的空间。


对于你的问题,接收方的 `recvfrom` 函数设置了缓冲区大小为30000字节,但实际接收到的UDP数据报可能小于该大小。这是因为UDP是无连接的协议,数据报的大小可能被网络相关因素(如MTU)限制,并且在传输过程中可能会发生数据分片或丢失。


至于你在结构体尾部使用 `char data[0]`,实际上这是一种常见的技巧,可以用于在不知道数据大小的情况下动态分配内存。在接收到数据时,你可以使用接收到的 `size` 值作为动态分配内存的依据,然后将接收到的数据存储在动态分配的内存中。


需要注意的是,C99标准中引入了灵活数组成员的概念,但在C11标准中被废弃。因此,为了更好的可移植性和可维护性,建议使用动态分配内存的方式,而不是依赖于灵活数组成员。


总而言之,使用变长结构体可以在UDP通信中传输可变长度的数据,但需要注意UDP数据报的大小限制,并且要谨慎使用变长结构体以避免潜在的问题。

标签:中变长,udp,通信,UDP,分配内存,数组,大小,接收,数据
From: https://blog.51cto.com/M82A1/7473235

相关文章

  • js浏览器通信postMessage
    1、背景:一个应用中内嵌了iframe,外层应用需要知道iframe做了一些具体的操作来更新页面,所以需要用到postMessage2、代码模块发起方:window.parent.postMessage({type:'sign-event',//事件名,内外层统一data:{data:data//需要传递的参数},......
  • Vue学习四:组件的三大组成部分、组件通信和进阶语法
    一、组件的三大组成部分<template>里面只能有一个根元素<style>全局样式(默认):影响所有组件局部样式:scoped下样式,只作用于当前组件<script>el根实例独有,data是一个函数,其他配置项一致二、scoped设置局部样式默认情况:写在组件中的样式会全局生效→因此很容易造成多......
  • 应用层通信协议设计
    一、应用层通信协议概述TCP/UDP是基于字节流的传输层通信协议,对于其的编程是基于IO流编程,所谓“流”,就是没有界限的一长串二进制数据。TCP/UDP作为传输层协议,并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行数据包的划分。所以在业务上一个完整的数据包在进行传......
  • Teamcenter SOA 挂关系,报服务器通信丢失的错误
    问题:handler调用SOA服务批量挂关系的时候,出现了Teamcenter与服务器通信丢失的错误*****Exceptioncaughtincom.teamcenter.clientx.AppXExceptionHandler.handleException(InternalServerException).Theserverreturnedaninternalservererror.操作执行期间,与Team......
  • 通信系统的性能指标
    主要性能指标:有效性(速度)、可靠性(质量)有效性模拟通信系统中:带宽数字通信系统中:码元传输速率(码元速率、传码率)单位时间(每秒)内系统传输的码元符号的数目,单位为波特(Baud),用\(......
  • 数据通信网络之IPv6以太网二层交换
    文章及资源归档至【AIShareLab】,回复通信系统与网络可获取。一、实验目的掌握VLAN、Trunk的基础配置。掌握以太网链路聚合的基础配置。掌握路由器子接口的配置,以及通过子接口实现VLAN之间互通的方法(单臂路由)二、实验环境及网络拓扑本实验模拟一个典型的简单园区网络,如图1所......
  • 关于TCP 和 UDP 的 Socket 调用
    在网络层,Socket函数需要指定到底是IPv4还是IPv6,分别对应设置为AF_INET和AF_INET6。另外,还要指定到底是TCP还是UDP。TCP协议是基于数据流的,所以设置为SOCK_STREAM,而UDP是基于数据报的,因而设置为SOCK_DGRAM。TCP的服务端要先监听一个端口,一般是先调用bind函数,给这......
  • 融合通信在电力行业中的应用
     所谓电力应急,就是快速处理突发紧急事件尽量减少因供电中断造成的损失,快速修复故障设备或线路,使电力生产和运营恢复正常。重大施工事故、公共紧急事件、性质恶劣的违章操作、蓄意破坏、自然灾害等,都极易引发大规模停电事故甚至电网瘫痪,这些都为电力应急可能面临的局面。  ......
  • 融合通信在电力行业中的应用
    所谓电力应急,就是快速处理突发紧急事件尽量减少因供电中断造成的损失,快速修复故障设备或线路,使电力生产和运营恢复正常。重大施工事故、公共紧急事件、性质恶劣的违章操作、蓄意破坏、自然灾害等,都极易引发大规模停电事故甚至电网瘫痪,这些都为电力应急可能面临的局面。随着信息技术......
  • Java网路编程____UDP协议Socket客户端服务器聊天室列子
    1.UPD服务端定义数据Socket和注册外放的端口一直做true循环读取数据包Packet里的数据datagramPacket.getData()转换为String字符串读取 packagecom.frame.base.UDP;importjava.net.DatagramPacket;importjava.net.DatagramSocket;/***@authorAdministrator*UDP_So......