通过套接字发送和接收原始结构是不安全的吗?

时间:2015-06-01 22:04:44

标签: c++ winsock

我正在研究远程控制程序。我需要一次发送和接收多个数据。我使用这个解决方案:

struct PACKET
{
    int x;
    int y;
};

//...
PACKET p;
p.x = 10;
p.y = 5;
send(socket, (char*)&p, sizeof(PACKET), 0);

但是,我正在考虑这是否是一种安全的方法。我应该找到另一种解决方案吗?

1 个答案:

答案 0 :(得分:1)

这是不安全的,除非你能保证至少你的结构是POD,这是你的情况,并且两个平台都使用相同的endianness,你不这样做知道。

修改

可能会出现一些其他问题:对齐是一个(编译器可能会使用其他位填充您的结构),然后可以使用不同的模型表示数据本身。感谢@Andrew和@Slyps的评论。

所以看起来除非你在两个平台上确切地知道你的数据对齐/表示模型/字节顺序,否则你就不安全了。