在学习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)
{
if (sscanf(sendline, "%ld%ld",

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

5038

被折叠的 条评论
为什么被折叠?



