python socket总是从java socket writeInt接收0

时间:2021-06-08 14:25:26

标签: java python sockets

我正在尝试通过套接字将整数从 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 个字节。

1 个答案:

答案 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 的了解还不够多,无法说出那会是什么。

相关问题