如何使用python将套接字上的整数发送到Java应用程序?

Xåp*_* - 2 python java sockets byte integer

我有一个Python客户端发送数据(前面有数据长度消息):

s = socket.socket()
s.connect((host, port))
data = 'hello world'
s.sendall('%16s' % len(data)) #send data length
s.sendall(data) #send data
s.close()
Run Code Online (Sandbox Code Playgroud)

和Java中的服务器接收数据.服务器使用DataInputStream.readInt()在读取数据之前读取数据长度.但是我似乎得到了readInt()返回的非常大的数字.问题是什么?

men*_*nsi 7

Java期望整数的二进制表示.您可以使用struct模块生成二进制表示.

在您的情况下,这将是:

import struct
s.sendall(struct.pack('i', len(data)))
Run Code Online (Sandbox Code Playgroud)

还要确保使用正确的字节顺序.Java可能期望网络字节顺序.

  • 添加了字节顺序部分的链接.Java可能期望网络字节顺序 (2认同)