c++ - 通过套接字发送和接收原始结构不安全吗?

标签 c++ winsock

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

struct PACKET
{
    int x;
    int y;
};

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

但是,我正在考虑这样做是否安全。我应该寻找其他解决方案吗?

最佳答案

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

编辑

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

所以毕竟似乎除非您确切知道两个平台上的数据对齐/表示模型/字节顺序,否则您是不安全的。

关于c++ - 通过套接字发送和接收原始结构不安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30584097/

相关文章:

c++ - 宏中的换行符 #

c++ - 程序如何映射到计算机的内存和操作?

c++ - Boost动态序列化所有派生类型

异常后Java套接字无法使用

c++ - 如果我只有 SOCKET,是否可以找到端口号?

c++ - 二叉树的递归搜索同时返回 true 和 false

C++保存成员函数setf()的返回值

c++ - 无法将 WSPStartup 设置为 dll 导出

c++ - Winsock 2 可移植性

C++ Winsock2 接收垃圾