Python:如何通过网络连接传输varrying长度数组

Dev*_*vin 5 python arrays networking unpack pack

我需要传输一个不同长度的数组,其中每个元素是两个整数的元组.举个例子:

path = [(1,1),(1,2)]
path = [(1,1),(1,2),(2,2)]
Run Code Online (Sandbox Code Playgroud)

我试图使用pack和unpack,但是,由于数组的长度不同,我不知道如何创建一个格式,使得两者都知道格式.我试图将它变成带分隔符的单个字符串,例如:

msg = 1&1~1&2~
sendMsg = pack("s",msg) or sendMsg = pack("s",str(msg))
Run Code Online (Sandbox Code Playgroud)

在接收方:

path = unpack("s",msg)
Run Code Online (Sandbox Code Playgroud)

但在这种情况下只打印1.我也试图发送4个整数,只要我不包含代表路径的额外字符串,它就会发送和接收.

sendMsg = pack("hhhh",p.direction [0],p.direction [1],p.id,p.health)

在接收方:

x,y,id,health = unpack("hhhh",msg)
Run Code Online (Sandbox Code Playgroud)

第一个是插图,因为我试图发送格式"hhhhs",但无论哪种方式路径都没有正确通过.

谢谢您的帮助.我还将研究发送一个二维数组的整数,但我似乎无法弄清楚如何在网络中发送这些更"复杂"的结构.

谢谢您的帮助.

Mar*_*ers 7

虽然您可以使用打包和解压缩,但我建议使用YAMLJSON之类的东西来传输数据.

  • 如果您更改接口并且尝试相互通信的不同版本,打包和解压缩可能导致难以调试错误和不兼容.
  • Pickle可能会出现安全问题,并且Python版本之间的pickle格式可能会发生变化.

自2.6以来,JSON包含在标准Python发行版中.对于YAML,有PyYAML.


Jus*_*ier 0

如果您将消息长度作为消息的一部分,那么您将知道要读取多少数据。因此整个字符串应该通过网络读取。

无论如何,如果您发布一些用于通过网络发送数据的代码,或者至少提供更多描述,也许会有所帮助。