1. 问题描述
在C/C++中处理结构体在网络上传输的处理
1.1 直接发送二进制的结构体数据
struct DataFormat {
long arg1;
long arg2;
};
struct Result {
long sum;
};
int main(int argc, char **argv) {
...
char sendline[MAXLINE];
struct DataFormat args;
struct Result result;
args.arg1 = 1;
args.arg2 = 2;
write(sockfd, &args, sizeof(args));
if (readn(sockfd, &result, sizeof(result)) != 0)
printf("%ld\n", result.sum);
...
}
这种做法有许多缺陷,包括:
- 发送的多字节类型(int,long等)在不同架构的机器上的大小端方式可能不同,造成解析错误
- 即使是大小端一致的机器上,可能由于int、long等类型的机器字长不同而出现错误
- 结构体在不同的编译器中的对其方式可能有所不同,这也会造成解析错误