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

What is the systematic way when I want my code (client and server ) work on various scenarios?

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

  1. 64 位服务器和 64 位客户端

  2. 32 位服务器和 64 位客户端

仅交易 *NIX 现在

server A和client B通信,我会交换一个struct的链表,类型如下:

typedef struct A{
   unsigned long filed1; 
   int filed2;
   char filed3;
   struct A* next; 
} A_t

charint 的大小在 32 位和 64 位机器上是一致的。 我更关心的是指针和 unsigned long。

我的sending/receiving策略是:

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

您应该以某种独立于机器(字长和字节顺序)的通用方式进行交流。最简单的方法是按列表顺序以 ASCII 格式发送,例如以 CSV 格式发送。接收方可以从中生成列表。

原则上你应该写一个IRS,一个Interface Requirements Specification,一个双方之间的合同。它应该处理记录的顺序、格式和(例如)数字字段的 minimum/maximum 可以是什么。最好把它写下来,它有多小,即使合同是与你自己签订的。在服务端和客户端的相关功能中添加注释。任何以后需要处理它的程序员现在都知道接口的约束。