我正在尝试通过套接字将整数从 java 发送到 python。这里 Python 是服务器,java 是客户端。
这是代码 Python服务器:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("localhost",999))
s.listen(5)
con,addr=s.accept()
num=con.recv(4)
print(int.from_bytes(num,byteorder='big'))#always zero
Java 客户端:
Socket s=new Socket("localhost",999);
dos=new DataOutputStream(s.getOutputStream());
dos.writeInt(2);
在python服务器中,无论我在java客户端发送什么,我总是收到0值。我检查了 num
值,它始终是单个 0 字节。我也尝试在 python 服务器中更改 byteorder
但没有用。这种行为的原因是什么?
编辑:
我看起来必须使用 4 个 recv
函数来读取 4 个字节。我仍然不明白为什么 writeInt
会发生这种情况。使用 writeUTF
,我能够使用单个 recv
接收 1024 个字节。
答案 0 :(得分:1)
我认为正在发生的事情是您在 Python 端读取字节,但在 Java 端您发送的是 int
,这是一个 4 字节的数量。 4 个字节将作为 0 0 0 2
发送,因此您可能会读取第一个 0。
尝试两件事,在 Python 端,读取四个字节并打印每个字节的结果。
然后在 Java 端,不是发送 2,而是发送 0x01020304
(是的,这是一个数字)。这应该将 int
发送的每个字节设置为 1 2 3 4,因此很容易阅读并查看您得到的部分。
从中您应该能够弄清楚如何从 Java 中读取 int
。如果 Python 能够从字节数组或套接字中一次读取四个字节,那将会很方便。抱歉,我对 Python 的了解还不够多,无法说出那会是什么。