相关疑难解决方法(0)

通过C中的套接字传递结构

我试图将整个结构从客户端传递到服务器,反之亦然.让我们假设我的结构如下

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:当我尝试使用sendtorecvfrom函数发送字符串或整数变量时,我在接收端正确接收数据.为什么不在结构的情况下?如果我不必使用序列化功能,那么我应该单独发送结构的每个成员吗?这实际上不是一个合适的解决方案,因为如果有'n'个成员,那么只有添加'n'个代码行才能发送或接收数据.

c sockets sendto recv

48
推荐指数
4
解决办法
8万
查看次数

将int存储在char数组中?

我想在char数组中存储一个4字节的int ...这样char数组的前4个位置就是int的4个字节.

然后,我想把int拉出数组......

此外,如果有人可以给我代码在循环中执行此操作,奖励积分... IE写入8字节到32字节数组.

int har = 0x01010101;
char a[4];
int har2;

// write har into char such that:
// a[0] == 0x01, a[1] == 0x01, a[2] == 0x01, a[3] == 0x01 etc.....

// then, pull the bytes out of the array such that:
// har2 == har
Run Code Online (Sandbox Code Playgroud)

多谢你们!

编辑:假设int有4个字节......

编辑2:请不要关心字节序...我会担心字节序.我只是想用不同的方法来实现C/C++中的上述功能.谢谢

编辑3:如果你不能说,我正在尝试在低级写一个序列化类......所以我正在寻找不同的策略来序列化一些常见的数据类型.

c c++ arrays pointers

20
推荐指数
6
解决办法
6万
查看次数

标签 统计

c ×2

arrays ×1

c++ ×1

pointers ×1

recv ×1

sendto ×1

sockets ×1