网络传输结构体,字节序,大小端怎么解决

何日人再来 2009-06-08 12:38:12
rt,还有对齐
采用base64编码?
还是写个函数,里面把基本类型都转成网络字节序?
...全文
1866 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
duanxj_buaa 2010-06-16
  • 打赏
  • 举报
回复
还是有办法的,将传送和接收端的结构体定义中,元素的顺序完全颠倒一下,然后将接收到的数据也完全颠倒,结构体指针就可以用了
何日人再来 2009-06-10
  • 打赏
  • 举报
回复
没人来补充了吗?好吧,谢谢各位了
ok1234567 2009-06-09
  • 打赏
  • 举报
回复
如果要通用,就不是传送结构体,实际上网络上连变量的概念最好都不要有,只有字节
所以,你必须把你要传送的东西全部转换成字节后,再发送出去,在c中,以字节方式存在的数据,是不需要进行转换的,比如char *什么的,对于多字节字符串,依然免不了解释

如果你要直接收发结构体数据,那也是可以的,核心的问题:结构体长度一致,当然两边的平台一致是基本前提
dch4890164 2009-06-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 greatws 的回复:]
没必要考虑大小端、字节序、对其的问题,只要2边的这个结构体定义一样就行了。接收端直接转换成struct xxx*指针的形式使用,和发送端就一致了。
[/Quote]
呵呵不是吧,这个有点误导人了就
sun007700 2009-06-09
  • 打赏
  • 举报
回复
在网络上面有着许多类型的机器,这些机器在表示数据的字节顺序是不同的, 比如i386芯片是低字节在内存地址的低端,
高字节在高端,而alpha芯片却相反. 为了统一起来,在Linux下面,有专门的字节转换函数.
unsigned long int htonl(unsigned long int hostlong)
unsigned short int htons(unisgned short int hostshort)
unsigned long int ntohl(unsigned long int netlong)
unsigned short int ntohs(unsigned short int netshort)

在这四个转换函数中,h 代表host, n 代表 network.s 代表short l 代表long
第一个函数的意义是将本机器上的long数据转化为网络上的long. 其他几个函数的意义也差不多.


转载:http://blog.csdn.net/jenshy/archive/2006/04/18/667944.aspx
skyxie 2009-06-08
  • 打赏
  • 举报
回复
1.

#pragma pack(push)
#pragma pack(1)
//定义结构体
#pragma pack(pop)


2. 传输的时候都使用网络字节序,这是标准的做法。
发送方htonl/s 接收方ntohl/s
hendriclee 2009-06-08
  • 打赏
  • 举报
回复
有一个函数可以转换网络字节序列,参考:http://www.52rd.com/Blog/Detail_RD.Blog_imjacob_17298.html
何日人再来 2009-06-08
  • 打赏
  • 举报
回复
一个一个转很繁琐啊,而且有些类型怎么转啊象int,char *这样的怎么转啊
有没有更好的解决方案呢?你们都是怎么做的?
skyxie 2009-06-08
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 greatws 的回复:]
没必要考虑大小端、字节序、对其的问题,只要2边的这个结构体定义一样就行了。接收端直接转换成struct xxx*指针的形式使用,和发送端就一致了。
[/Quote]
你的程序没有出bug只能说是因为C/S两端的机器恰好都是相同的endian
(确实大部分机器都是little endian的)
greatws 2009-06-08
  • 打赏
  • 举报
回复
没必要考虑大小端、字节序、对其的问题,只要2边的这个结构体定义一样就行了。接收端直接转换成struct xxx*指针的形式使用,和发送端就一致了。
小小小黑猫 2009-06-08
  • 打赏
  • 举报
回复
我都是一个一个转的
wocow3 2009-06-08
  • 打赏
  • 举报
回复
主要注意结构体align问题,统一成nopack减少无用的数据传输
#include <PshPack1.h>
//定义结构体
...
#include <PopPack.h>
jyh_baoding 2009-06-08
  • 打赏
  • 举报
回复
传输前转化为网络需,接收是转化为本机序
内容概要:本报告基于寻汇与万事达卡在2026年联合发布的《超越自动化:定义智能体驱动的全球支付》白皮书,系统分析了AI智能体在B2B跨境支付领域的应用与发展。报告指出,传统跨境支付存在效率低、人工干预多、合规风险高等问题,当前正从数字化、数据化迈向“自主化”新阶段。AI智能体可在授权下自主完成支付、换汇、合规审核、对账等全流程操作,核心技术包括深度强化学习、自然语言处理和图神经网络,用于路径优化、合规解析与异常检测。报告揭示了决策可解释性不足、跨系统协同标准缺失、安全审计机制缺位三大研究空白,并探讨了法律责任归属、监管碎片化、数据主权与技术可靠性四大现实挑战。寻汇与万事达卡的合作构建了“智能体编排引擎”与全球合规决策网络,首次提出L0-L5的智能体自主化等级框架,推动行业标准化。预计2026至2027年将实现首批大规模商业部署,提升支付效率超30%。; 适合人群:金融科技研究人员、AI技术开发者、跨境支付行业从业者、企业财资管理人员及政策监管机构相关人员。; 使用场景及目标:①理解AI智能体在跨境支付中的技术架构与应用场景;②把握自主化支付的演进趋势与商业化前景;③为金融机构和技术公司布局AI驱动型支付系统提供战略参考;④助力监管机构制定适应智能体时代的合规框架。; 阅读建议:本报告兼具技术深度与产业视野,建议结合白皮书原文及相关技术文献对照研读,重点关注智能体决策逻辑、合规实现机制与跨系统集成方案,并关注后续试点项目的实际成效与监管反馈。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧