【发布时间】:2010-07-13 21:17:54
【问题描述】:
我有使用 Java 的经验,但我必须将 Java 库集成到同事的 Python 代码中。输入 jython,耶!
我们正在尝试发送带有非常特定数据部分的 UDP 数据包。
我们正在像这样构建数据包:
version = 0x0001
referenceNumber = 0x2323
bookID = byteArray('df82818293819dbafde818ef')
为了便于解释,假设 byteArray 接受一串十六进制数字并返回一个字节数组
然后我们构建数据包:
packet = hex(version)
packet += hex(referenceNumber)
packet += bookID
并将其从套接字发送出去。
我知道这是不正确的,数据类型不可能正确,所以 concat 不会做正确的事情。我们如何正确构建这个数据包? python 文档说 s.sendTo() 需要一个字符串?我想我想要一个 s.sendTo() 的替代方法,它需要一个字节数组。
我们希望数据包到达服务器时 udp 数据部分如下所示:
00 01 23 23 df 82 81 82 93 81 9d ba fd e8 18 ef
在 python 中执行此操作的正确方法是什么?
我们正在使用 wireshark 来验证数据包是否正确到达,现在 udp 数据部分看起来好像 python 将每个字段转换为 ascii 表示。例如,referenceNumber 字段作为文字字符串 '0x2323' 的 ascii 值出现。这是有道理的,因为 s.sendTo() 需要一个字符串。
====================解决方案========================== ====
是的,就是这样...显示了我对 python 的了解程度。对于好奇,这里是代码:
version = '0001'
referenceNumber = '2323'
packet = a2b_hex(version)
packet += a2b_hex(referenceNumber)
.. etc
那么就
s.send(packet)
【问题讨论】:
标签: java python sockets jython