二进制数据与大小端不得不说的秘密

在进行UNIX网络编程时,作者发现二进制数据的大小端差异导致了数据传输错误。通过在64位小端系统(Ubuntu)上作为客户端,32位大端系统(MIPS开发板)作为服务端的实验,作者揭示了数据在传输过程中的错误相加,产生了不期望的结果。问题的关键在于数据接收方未能正确处理字节顺序,导致了随机数的出现。通过初始化结构体和理解字节对齐,可以避免此类问题。
摘要由CSDN通过智能技术生成

    在学习unix网络编程的时候,遇到一个问题,那就是二进制数据在网络中传输中会受到大小端、机器位数等影响。那么如何影响呢?我手头有两台设备64位的ubuntu(小端)和32位linux开发板(MIPS架构、大端),说做就做。

    我在32位机器(大端)上搭建服务端、在64位机器(小端)上搭建客户端。程序设计为客户端向服务端发送两个long类型的数据,服务端接收后将两个数据相加并返回给客户端。

服务端端核心代码如下:

    for ( ; ; ) 
    {   
        if ( (n = read(sockfd, &args, sizeof(args))) == 0)
            return;
        result.sum = args.arg1 + args.arg2;
        printf("%ld-%ld\n", args.arg1, args.arg2);                                                                                                            
        write(sockfd, &result, sizeof(result));
    }   
客户端核心代码如下:



    while (fgets(sendline, MAXLINE, fp) != NULL)                                                                                               
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值