python 连接 ctype 结构和数组

python concatenate ctype struct and array

我正在尝试实施自定义 UDP 协议。该协议有一个 header 和数据。 header 包含有关数据结构的信息。

header 使用 ctypes 结构定义,数据使用 'h' 数组(短符号)。

我正在使用 python 套接字。

我尝试使用单独调用 "socket.sendto" 来发送 header ans 数据,如下所示:

s.sendto(header, addr)
s.sendto(data, addr)

但我无法连续接收此信息。 "socket.recvfrom" 仅获取 header。也许如果我再次调用 "socket.recvfrom" 我也会得到数据。但这不是我需要的。我需要完整的数据包作为流。我认为连接服务器本身中的 header 和数据可能会解决这个问题。

所以我尝试了以下不同的组合来连接两者:

以上所有都因某种原因而失败。

如果我需要转换 header 或数据,我希望它是 header,因为它更小。但是,如果没有办法,我可以转换数据。

非常感谢任何帮助。

相关代码片段:

sdata = array("h")
.
.
.
header=protocol.HEADER(1,50,1,50,1,50,1,50,1,10,1,12,1,1,1,1,1,18,19,10,35,60,85,24,25)
.
.
s.sendto(header+sdata, addr)

您可以将 header 结构复制到 ctypes 字节数组中:

>>> buf = (ctypes.c_char * ctypes.sizeof(header)).from_buffer_copy(header)

现在,在Python 2,

>>> buf.raw + sdata.tostring()

应该能满足您的需求。

在Python3中,会是

>>> buf.raw + sdata.tobytes()