使用 C 中的 UDP 套接字将结构从客户端传递到服务器

Passing a struct from client to server using UDP sockets in C

在 C 语言中如何使用套接字将结构从 UDP 客户端传递到 UDP 服务器?您如何访问服务器上结构包含的变量?如果传输的是下面的结构,服务器如何看到姓名或年龄是什么?

struct animal {
    int age;
    char name[25];
};

你写入UDP数据包缓冲区的是从结构地址开始的结构内容。接收端应将接收到的数据复制到相同大小的缓冲区中,然后将其转换为完全相同的结构,以完全相同的方式定义。

正确的答案是使用 Google Protobuf 之类的东西,这将保护您免受字节序、整数大小以及服务器和客户端版本之间结构的未来变化的影响。这是一个将您的结构成员打包成中性数据包格式的库,然后可以在另一端进行解析。

然而,对于学习低级 UDP 套接字的人来说,在两台相同的机器之间发送这样的结构很简单:

send( sock, &myanimal, sizeof( myanimal ), 0 );

在服务器上:

recv( sock, &newanimal, sizeof( myanimal ), 0 );

(对未连接的 UDP 套接字使用 sendtorecvfrom)。

这将创建一个字节对字节的副本,其工作方式与 memcpy() 一样。如果您的主机不匹配,则该副本可能与您的结构不一致。但如果他们这样做,您将像在客户端上一样在服务器上访问它。

您可以使用 socketpair() 在您自己的进程中创建套接字的两端(很像 pipe())并测试它,甚至无需构建 UDP 部分。在那里工作后,继续使用 UDP。