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

来源:互联网 发布:淘宝网泳衣专卖店 编辑:程序博客网 时间:2024/05/01 20:31
<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