我试图将整个结构从客户端传递到服务器,反之亦然.让我们假设我的结构如下
struct temp {
int a;
char b;
}
Run Code Online (Sandbox Code Playgroud)
我使用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);
Run Code Online (Sandbox Code Playgroud)
其中pkt是struct temp类型的变量.
虽然我收到8字节的数据,但如果我尝试打印它只是显示垃圾值.任何帮助修复它?
注意: 不得使用第三方库.
编辑1:我对这个序列化概念真的很陌生.但是如果不进行序列化,我不能通过套接字发送结构?
EDIT2:当我尝试使用sendto和recvfrom函数发送字符串或整数变量时,我在接收端正确接收数据.为什么不在结构的情况下?如果我不必使用序列化功能,那么我应该单独发送结构的每个成员吗?这实际上不是一个合适的解决方案,因为如果有'n'个成员,那么只有添加'n'个代码行才能发送或接收数据.
我有一个小型客户端服务器应用程序,我希望通过C而不是C++的TCP套接字发送整个结构.假设结构如下:
struct something{
int a;
char b[64];
float c;
}
Run Code Online (Sandbox Code Playgroud)
我发现很多帖子说我需要使用pragma pack或在发送和接收之前序列化数据.
我的问题是,使用JUST pragma pack还是仅仅序列化就足够了?或者我需要同时使用两者吗?
此外,由于序列化是处理器密集型过程,这会使您的性能急剧下降,那么在不使用外部库的情况下序列化结构的最佳方法是什么(我想要一个示例代码/算法)?