3

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

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

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

4

2 回答 2

1

最简单、最轻量级的解决方案 - 如果您在两台机器之间以 a 的形式打开连接FILE*- 可能是一端传输,fprintf另一端解码fscanf

协议.h:

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);
  ...

听众:

...
int n_read = fscanf(fin, packet_fmt, &acct, fname, sname, &balance);

if (n_read == 4)
  printf("Received balance update for %s %s: %f\n", fname, sname, balance);
...

这对于您的四字段结构可能就足够了,但是如果您预计它的结构会发生变化或显着增长,那么使用 XML、JSON 或其他一些更正式的编码可能是有意义的。

于 2012-06-16T23:11:17.867 回答
1

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

于 2012-06-16T23:19:04.203 回答