我遇到了在接收来自 python 客户端的请求的 C tcp 套接字服务器中读取字节的问题。我有以下结构作为我的接收模板
struct ofp_connect {
uint16_t wildcards; /* identifies ports to use below */
uint16_t num_components;
uint8_t pad[4]; /* Align to 64 bits */
uint16_t in_port[0];
uint16_t out_port[0];
struct ofp_tdm_port in_tport[0];
struct ofp_tdm_port out_tport[0];
struct ofp_wave_port in_wport[0];
struct ofp_wave_port out_wport[0];
};
OFP_ASSERT(sizeof(struct ofp_connect) == 8);
我可以正确读取前两个 32 位字段,但我的问题是填充字段之后的 in_port[0] 似乎是错误的。目前阅读的方式是
uint16_t portwin, portwout, * wportIN;
wportIN = (uint16_t*)&cflow_mod->connect.in_port; //where cflow_mod is the main struct which encompasses connect struct template described above
memcpy(&portwin, wportIN, sizeof(portwin) );
DBG("inport:%d:\n", ntohs(portwin));
不幸的是,这并没有给我预期的输入端口号。我可以在wireshark中检查客户端正在发送正确的数据包格式,但我觉得我读取输入/输出端口的方式是错误的。还是因为 python 发送数据的方式?你能就我哪里出错以及为什么出错提供一些建议吗?提前致谢。