文件传输错误 64位到32位系统

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">通过socket实现的文件传输,在传输文件名等属性时在对端总是收到错误的信息,比如文件名,收到的总是空字符串,百思不得其解。后把所有的信息都输出去查看了。终于发现原来是64位系统与32位系统的字节对齐不同。对于发送的结构体信息,由于要使得其字节对齐。所以系统会自动向结构体添加添加字符使得结构体对齐</span>
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span><pre name="code" class="cpp">struct filehead
{
    int cmd;
    int a;
    int b;
    filename[20];
  }
在64位系统中是8字节对齐
而在32为系统中默认的是4字节对齐。所以收到信息后用结构体读取其中的信息时就会产生错位。因而会造成传输过程的错误
还有就是TCP连接默认的每次发送都以最大报文长度发送,所以即使发送缓存很小的时候,也可能会在发送的时候会收到很大的报文。会造成发送和接收到的报文大小不一致的情况

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值