【发布时间】:2010-12-07 07:45:29
【问题描述】:
我正在尝试将整个结构从客户端传递到服务器,反之亦然。让我们假设我的结构如下
struct temp {
int a;
char b;
}
我正在使用 sendto 并使用 recvfrom 函数发送结构变量的地址并在另一端接收它。但我无法获得在接收端发送的原始数据。在 sendto 函数中,我将接收到的数据保存到 struct temp 类型的变量中。
n = sendto(sock, &pkt, sizeof(struct temp), 0, &server, length);
n = recvfrom(sock, &pkt, sizeof(struct temp), 0, (struct sockaddr *)&from,&fromlen);
其中 pkt 是 struct temp 类型的变量。
即使我收到 8 字节的数据,但如果我尝试打印它只是显示垃圾值。有什么解决办法吗?
注意: 不得使用第三方库。
EDIT1:我对这个序列化概念真的很陌生。但是如果不进行序列化,我就不能通过套接字发送结构吗?
EDIT2: 当我尝试使用 sendto 和 recvfrom 函数发送字符串或整数变量时我在接收端正确接收数据。为什么不是在结构的情况下?如果我不必使用序列化功能,那么我应该单独发送结构的每个成员吗?这确实不是一个合适的解决方案,因为如果有“n”个成员,那么就会添加“n”行代码来发送或接收数据。
【问题讨论】:
-
您可以发布您的发送/接收代码吗?
-
你为什么要恢复我的编辑来纠正奇怪的双问号?
-
不要使用结构体作为网络协议。使用网络协议作为网络协议。以八位字节设计您的协议,并为自己编写一个库来发送和接收它。或者使用现有的,例如 DML、XDR、... 使用 structs 会引入至少六个您甚至可能不知道的依赖项,并会导致类似这样的进一步问题。
-
@EJP - 我同意你的看法