首页 > 解决方案 > python socket总是从java socket writeInt接收0

问题描述

我正在尝试通过套接字将整数从 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 字节。我也尝试byteorder在 python 服务器中进行更改,但没有用。这种行为的原因是什么?

编辑:我看起来我必须使用 4 个recv函数来读取 4 个字节。我仍然很困惑为什么会发生这种情况writeInt。随着writeUTF我能够接收 1024 个字节的单个recv.

标签: javapythonsockets

解决方案


我认为正在发生的事情是你在 Python 端读取字节,但在 Java 端你正在发送int一个 4 字节的数量。将发送 4 个字节,0 0 0 2因此您可能会读取前 0 个字节。

有两件事要尝试,在 Python 端,读取四个字节并打印每个字节的结果。

然后在 Java 端,不是发送 2,而是发送0x01020304(是的,这是一个数字)。这应该将发送的每个字节设置int为 1 2 3 4,因此很容易阅读并查看您得到的部分。

从中您应该能够弄清楚如何int从 Java 中读取 s 。如果 Python 有一个从字节数组或套接字一次读取四个字节的功能,那将会很方便。对不起,我不知道足够的 Python 来说明那会是什么。


推荐阅读