一个由sizeof引发的问题
2015-02-02 09:12
218 查看
在C/S程序中,往往需要在服务端和客户端传送结构体,在最近的一个项目中定义了如下的结构体:
客户端和服务器端都使用了该结构体,由于在服务器端重新指定了对齐方式(#pragma pack(1)),所以SIGN_LEN的长度是50(2+4+40+4),
但在客户端程序中使用了默认的对齐方式(#pragma pack()),所以SIGN_LEN的长度是52(4+4+40+4)。
在这种情况下,使用SOCKET发送标识头的时候,由于客户端和服务端之间约定的字节流长度不一致,导致程序无法运行。
其他知识点:
可以通过#pragma pack(X), 在代码中改变部分结构体的对齐方式,也可以通过VS2008来设置,如下图
参考资料:
http://blog.csdn.net/susan19890313/article/details/7489848
class ISign { public: unsigned short m_sSign; long m_sSumLen; char md5[40]; long reqId; }; #define SIGN_LEN sizeof(ISign)
客户端和服务器端都使用了该结构体,由于在服务器端重新指定了对齐方式(#pragma pack(1)),所以SIGN_LEN的长度是50(2+4+40+4),
但在客户端程序中使用了默认的对齐方式(#pragma pack()),所以SIGN_LEN的长度是52(4+4+40+4)。
在这种情况下,使用SOCKET发送标识头的时候,由于客户端和服务端之间约定的字节流长度不一致,导致程序无法运行。
其他知识点:
可以通过#pragma pack(X), 在代码中改变部分结构体的对齐方式,也可以通过VS2008来设置,如下图
参考资料:
http://blog.csdn.net/susan19890313/article/details/7489848
相关文章推荐
- 一个游戏引发的思考(概率问题)
- 一个游戏引发的思考(概率问题)
- 安装SQL Server2K可能引发一个严重问题(1)
- 一个小程序引发的讨论(运算优先级、参数传递与调用约定的问题)
- 一个问题引发的思考
- 一个VS.net自动生成代码引发的问题
- 一个由安装顺序引发的域登录问题
- 安装SQLServer2K可能引发一个严重问题
- 安装2K可能引发一个严重问题
- 一个Image控件或ImageButton控件在ASPX页面引发的问题(可能大家没有注意过)
- 一个php版本引发的问题
- 安装SQL Server2K可能引发一个严重问题
- Python笔记:一个二维数组引发的问题
- 安装SQL Server2K可能引发一个严重问题(2)
- 安装SQL Server2K可能引发一个严重问题
- 处理一个傻子引发得问题
- sizeof的一个不曾注意的问题
- 安装SQL Server2K可能引发一个严重问题
- vs2003复制一个web窗体,没有更改指向同一个cs 文件,引发大问题
- 一个在线连接数引发的Delphi线程安全(Thread Safe)问题