我有以下结构,我正在尝试通过网络发送到另一个应用程序
struct protocol
{
char protocol;
char field1;
char field2;
char field3;
char field4;
char field5;
char field6;
char field7;
char field8;
char msg_id;
char msg_length;
char *msg;
};
我遇到的问题是,我不确定如何通过网络发送这个结构,因为有一个指针指向其中的字符串,并且 memcpy 到缓冲区的结构不起作用,如下所示唯一的方法吗?
memcpy (buffer, protocol->protocol, char)
memcpy (buffer, protocol->field1, char)
...
memcpy (buffer, protocol->msg, protocol->length)
然后发送缓冲区
最佳答案
您需要将结构序列化到某种缓冲区中。您的副本顺序仅在概念上是正确的;有无数细节需要解决:
char buffer[sizeof(struct protocol) + protocol->msg_length]; // Over-allocation
buffer[0] = protocol->protocol;
buffer[1] = protocol->field1;
...
buffer[8] = protocol->field8;
buffer[9] = protocol->msg_id;
buffer[10] = protocol->msg_len;
memcpy(&buffer[11], protocol->msg, protocol->msg_len);
现在您可以写入正确的缓冲区长度(11 + protocol->msg_len
)来发送。
这个特别简单;无需担心字节序问题。通常,对于 short
或 int
或 long long
等多字节值,您必须担心传输的字节顺序。
关于c - 使用 send 的结构内部的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13998798/