我在两台不同的机器上有一个 C 结构——服务器和客户端。例如:
struct account {
int account_number;
char *first_name;
char *last_name;
float balance;
};
我的问题是在机器之间复制数据的可能方法是什么?也许我可以尝试将数据转换为 XML 并复制它?或者我可以使用数组?
我在两台不同的机器上有一个 C 结构——服务器和客户端。例如:
struct account {
int account_number;
char *first_name;
char *last_name;
float balance;
};
我的问题是在机器之间复制数据的可能方法是什么?也许我可以尝试将数据转换为 XML 并复制它?或者我可以使用数组?
最简单、最轻量级的解决方案 - 如果您在两台机器之间以 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 或其他一些更正式的编码可能是有意义的。
如果您熟悉 C,那么我会使用 TCP 套接字来传输和接收您的数据。您基本上需要将数据作为原始字节并以指定的顺序传输,以便在收到时对其进行解码。您将需要考虑机器的一致性,并且您还需要发送额外的数据字段来指定可变长度名称的长度(以便您知道要接收多少字节)。通常最好添加一个字段来指示您发送的数据包的总大小。基本上你可以用你选择的任何方式对你的数据包进行编码,只要你在另一端以同样的方式解压它,你的数据就会被传输。也许这是一种老套的做事方式,但我在日常工作中一直使用这种方法在机器之间传输数据。它是您可以使用的众多选项之一。您可以以其他格式将数据作为 xml 发送,但发送原始字节会导致数据包更小(这可能是您需要解决的问题,也可能不是)。希望这可以帮助。