在两个C结构之间复制数据

时间:2012-06-16 22:54:07

标签: c struct synchronization copy

我在两台不同的机器上有一个C结构 - 服务器和客户端。例如:

struct account {
   int account_number;
   char *first_name;
   char *last_name;
   float balance;
};

我的问题是在机器之间复制数据的可能方法是什么?也许我可以尝试转换XML中的数据并复制它?或者我可以使用数组?

2 个答案:

答案 0 :(得分:1)

最简单,最轻量级的解决方案 - 如果您以FILE*的形式在两台计算机之间建立连接 - 可能是在一端使用fprintf进行传输,并使用{{进行解码1}}另一方面。

protocol.h:

fscanf

发件人:

typedef struct _packet packet_t;

struct _packet {
  int account_number;
  char *first_name;
  char *last_name;
  float balance;
};

static const char packet_fmt[]=" acct: %d fname: %s sname: %s balance: %f";

监听器:

  ...
  printf(packet_fmt, acct, "Greg", "Benison", bal);
  ...

这可能足以满足您的四字段结构,但如果您预期其结构发生变化或显着增长,那么追求XML,JSON或其他更正式的编码可能是有意义的。

答案 1 :(得分:1)

如果您熟悉C,那么我会使用TCP套接字来传输和接收您的数据。您需要基本上以原始字节和指定顺序传输数据,以便在收到时对其进行解码。您将需要允许机器的细节,并且您还需要发送其他数据字段以指定可变长度名称的长度(以便您知道要接收多少字节)。通常,最好添加一个字段,指示要发送的数据包的总大小。基本上,您可以根据自己的选择对数据包进行编码,并提供以相同方式解压缩数据,另一端将传输数据。也许这是一种老式的做事方式,但我在日常工作中一直使用这种方法在机器之间传输数据。这是您可以使用的众多选项之一。您可以将数据作为其他格式的xml发送,但发送原始字节会产生较小的数据包(这可能是也可能不是您需要解决的问题)。希望这会有所帮助。