gpt4 book ai didi

使用套接字复制结构

转载 作者:行者123 更新时间:2023-11-30 15:31:10 25 4
gpt4 key购买 nike

如何通过网络套接字复制struct?我想通过套接字交换以下类型的struct:

struct msg{
char *from;
char *to;
int size;
};
struct msg m1={"me","you",20};

int sd=socket(AF_INET,SOCK_STREAM,0);
send(sd,&m1,sizeof(struct msg),0);

但是我无法理解对方收到的值。尝试将结构字段从指针更改为固定大小的数组,但这也没有帮助。

最佳答案

您的实现存在一些问题。您需要了解的是,线路(通信链路)上的数据只是一个字节数组,由链路两侧的平台将它们解析为更有意义的内容。这意味着将数据序列化到通信介质以及将其反序列化回人类可读格式必须彼此匹配以及双方使用的平台。例如,从小端平台发送到大端平台(英特尔到摩托罗拉)而不考虑字节切换将导致另一端的数据完全困惑。

回到你的例子,你天真地把指针传递给你的结构,就好像它是一个字符数组一样。这假设分配给变量的内存是连续的,但情况不一定如此。另外,还存在双方环境的字节对齐问题,这意味着除非双方都设置为1,否则发送方的编译器可能会用零值填充某些变量,导致另一方读取它们如果设置为不同的字节对齐方式,情况会有所不同。

总结一下:为了使其安全工作,您需要将变量显式复制到发送缓冲区,并在另一端显式读取它们。您还应该确保双方使用相同的平台(我假设您双方都有英特尔)。顺便说一句,在处理字符串时,您需要确保复制尾随的 0,这样当您尝试读取另一侧的字符串时,它将正确读取。

关于使用套接字复制结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25029422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com