【问题标题】:how to send and recv c struct between udp server(in c) and udp client(python)?如何在 udp 服务器(在 c 中)和 udp 客户端(python)之间发送和接收 c 结构?
【发布时间】:2020-10-10 13:46:52
【问题描述】:

我有这个结构

struct Data
{
      int id;
      int msglen;
      char msg[100];
}

我需要在 udp 服务器和 udp 客户端之间传递这个结构。udp 客户端是基于 python 的。

【问题讨论】:

  • 你打算在客户端用那个结构做什么?
  • 只是分析双方的msg并相应地发送响应
  • 你打算如何分析python代码中的C结构?
  • 你的问题太宽泛了。从该结构到服务器和客户端有很多步骤和代码。那么您要问的确切方面是什么?最好能展示一下到目前为止你完成了哪些代码或提出更具体的问题。
  • @MohithReddy 分析 c 结构是我的主要疑问,即如何在 python 中打包结构并在 c 处接收。然后解包从 c 服务器接收到的结构。

标签: python c network-programming udp client-server


【解决方案1】:

首先,您需要将结构数据编码到单个二进制缓冲区中

#include <endian.h>
...
struct Data d { ... };

uint32_t be_id = htobe32(d.id);
uint32_t be_len = htobe32(d.msglen);

size_t pos = 0;
uint8_t buf[sizeof(struct Data)];

memcpy(buf, (const void *)&be_id, sizeof(be_id));
pos += sizeof(be_id);

memcpy(buf + pos, (const void *)&be_len, sizeof(be_len));
pos += sizeof(be_len);

memcpy(buf + pos, (const void *)d.msg, sizeof(d.msg));

然后发送缓冲区,从另一端解析。

【讨论】:

  • 为什么不直接发送结构体?为什么要复制它?
  • @MartinJames 结构填充问题,我想...
  • @MartinJames 因为不同架构之间的填充和字节序差异
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-22
相关资源
最近更新 更多