golang网络数据交换

发布时间:2023-06-04 17:30

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等类型的机器字长不同而出现错误
  • 结构体在不同的编译器中的对其方式可能有所不同,这也会造成解析错误

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号