【问题标题】:Sending an int from a python socket to a java socket将 int 从 python 套接字发送到 java 套接字
【发布时间】:2016-04-28 09:00:35
【问题描述】:

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

我尝试在结构中发送 int,但在 java 端返回大量数字。

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

【问题讨论】:

  • 你需要研究不同的序列化库,像 msgpack 这样的东西可以让你以统一的方式发送数据,以便所有语言都能理解数据。
  • 也许 字节顺序 是错误的...我猜您正在使用英特尔平台。那将是小尾数。 Internet 和 Java VM 标准是 Big Endian。因此,也许所有字节的顺序都错误(而不是 4-3-2-1,python 可能会发送 1-2-3-4)。也许这就是问题所在。我不知道python btw ;-)
  • 我个人根本不会使用序列化,但看看只是将原始数据发送到套接字。在 Java 中,您使用原始 Input/OutputStream 和 DataInput/OutputStream 来执行此操作。
  • 谢谢大家,原来是字节顺序不正确。 Jay 你能把它作为答案,以便我可以将其标记为解决方案吗?
  • 哦,威廉,我肯定会研究 msgpack。感谢您的建议!

标签: java python sockets networking


【解决方案1】:

https://docs.python.org/2/library/struct.html

查看 7.3.2.1。通过网络发送任何数据时,始终将其转换为网络字节顺序。你上面的代码是:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    • 2015-06-21
    • 1970-01-01
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多