Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 当我希望我的代码(客户机和服务器)在各种场景下工作时,系统化的方式是什么?_C_Linux_Cross Platform_32bit 64bit - Fatal编程技术网

C 当我希望我的代码(客户机和服务器)在各种场景下工作时,系统化的方式是什么?

C 当我希望我的代码(客户机和服务器)在各种场景下工作时,系统化的方式是什么?,c,linux,cross-platform,32bit-64bit,C,Linux,Cross Platform,32bit 64bit,我是在64位MAC上开发的。我希望它能在两种情况下工作: 64位服务器和64位客户端 32位服务器和64位客户端 现在只交易*NIX 在服务器A和客户端B之间的通信中,我将交换一个struct的链表,其类型如下: typedef struct A{ unsigned long filed1; int filed2; char filed3; struct A* next; } A_t 在32位和64位机器之间,char和int的大小都是一致的。 我更关心的是指针和无

我是在64位MAC上开发的。我希望它能在两种情况下工作:

  • 64位服务器和64位客户端

  • 32位服务器和64位客户端

  • 现在只交易*NIX

    在服务器A和客户端B之间的通信中,我将交换一个struct的链表,其类型如下:

    typedef struct A{
       unsigned long filed1; 
       int filed2;
       char filed3;
       struct A* next; 
    } A_t
    
    在32位和64位机器之间,
    char
    int
    的大小都是一致的。 我更关心的是指针和无符号long

    我的发送/接收策略是:


    发送和接收一个
    list_size*sizeof(A_t)
    字节的数组,但是由于sizeof(A_t)在32位和64位上的值不同,因此我的数组会有一些不对齐。我想知道解决这类问题最普遍的方法是什么

    您应该以某种独立于机器的通用方式进行通信(字号和尾音)。最简单的方法是按列表顺序以ASCII(例如CSV)的形式发送。接收者可以由此生成列表


    原则上你应该写一份IRS,一份接口需求规范,以及双方之间的合同。它应该处理记录的顺序、格式和(例如)数字字段的最小/最大值。这是一个很好的做法,写下这一点,它是多么的小,即使合同是与你自己。将其添加到服务器端和客户端相关函数中的注释中。任何未来必须处理此问题的程序员现在都知道界面的限制。

    你是在问如何使代码可移植?你所说的“传递传输”是什么意思?你能完成问题的最后一句吗?@PascalCuoq刚刚编辑过,但仍然不太清楚,我会尽我最大的努力。@yuan你的问题现在很清楚了,我投票决定重新打开它。@PascalCuoq添加了更多细节,使它更具体,非常感谢:)不过,现在我的程序的快速修复方法是,我希望
    结构a*
    在两个平台上具有相同的固定长度,同时保持语法正确。同时,在我的整个程序中,我将
    unsigned long
    更改为
    unsigned int
    ,这两个平台上的长度都是固定的。问:我不知道如何在保持语法正确性的同时保持指向struct的指针的固定长度。有什么想法吗?好办法是使用我提出的方法。幸运的是,这两个平台都使用了具有相同端点的处理器。否则,您的INT将全部被篡改。而且您无法与指针通信,因此请将指针保留在外。Poimters总是依赖于平台的字长。协议缓冲区是否值得尝试以避免端性?您所说的“协议缓冲区”是什么意思?