从Python套接字发送int到Java套接字

4

我目前正在努力让Python套接字将整数发送到Java套接字,以便Java套接字在此步骤后可以读取表示字符串的字节数组。

我尝试使用结构体发送int,但在Java端返回了一个巨大的数字。

p = struct.pack('i', len(data))
clientsocket.send(p)

1
你需要研究不同的序列化库,例如msgpack可以让你以统一的方式发送数据,以便所有语言都能理解这些数据。 - Will
2
也许字节顺序是错误的...我猜你正在使用英特尔平台。那应该是小端序。互联网和Java虚拟机标准是大端序。所以也许所有的字节都是错的(Python可能发送1-2-3-4而不是4-3-2-1)。也许这就是问题所在。顺便说一下,我对Python一无所知;-) - JayC667
我个人不会使用序列化,而是考虑直接将原始数据发送到套接字。在Java中,您可以使用原始Input/OutputStream和DataInput/OutputStream来实现这一点。 - markspace
谢谢大家,结果是字节顺序不正确。Jay,你能把这个作为答案吗,这样我就可以标记它为解决方案了吗? - Omega142
哦,威廉,我一定会研究一下msgpack的。谢谢你的建议! - Omega142
只需将其作为 ASCII 发送并在 Java 中转换为 int。 - Joran Beasley
1个回答

2
请查看7.3.2.1。在通过网络发送任何数据时,请始终将其转换为网络字节顺序。您的代码如下: https://docs.python.org/2/library/struct.html
p = struct.pack('!i', len(data))
clientsocket.send(p)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接