2010-07-13 36 views
1

我对Java有经验,但我必须将java库集成到同事python代码中。进入jython,耶!在jython udp数据包中发送原始十六进制数据

我们试图发送一个非常特定的数据部分的UDP数据包。

我们正在建设的包像这样:

version = 0x0001 
referenceNumber = 0x2323 
bookID = byteArray('df82818293819dbafde818ef') 

为了便于解释假定字节组发生在十六进制数字的字符串,并返回一个字节数组

然后,我们建立了包:

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 

什么是正确的做法,蟒蛇做到这一点?

我们使用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) 

回答