gpt4 book ai didi

java - 在 Python 和 Java 数据报套接字之间传递 JSON 数据

转载 作者:太空宇宙 更新时间:2023-11-03 19:00:23 24 4
gpt4 key购买 nike

嗨,我有一个非常简单的 Java 服务器和两个客户端。一个客户端基于 Java,另一个客户端基于 Python。当我将任何字符串从 Java 客户端发送到 java 服务器时,反之亦然,它工作正常。当我将任何字符串从 Java 发送到 python 时,它也可以正常工作。但是,当我从 python 发送一个由 py​​thon json lib 使用 json.dumps 生成的字符串时,我收到一个包含所需数据和空字节的 Java 缓冲区。没有字符串开始或结束的指示。我如何将其转换回相同长度的字符串。目前,在 JSON 数据完成后,该字符串有很多空字节,这就是为什么我无法正确解析该字符串。

Java的接收代码是这样的。

byte[] receiveData = new byte[1024];
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
CtrlChannel.getSocket().receive(receivePacket);
strData = new String(receivePacket.getData());
System.out.println("FROM PYTHON:" + strData);

python的发送者代码是这样的。

...
...
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))
data = {}
data["type1"] = "type1"
data["type2"] = "type2"
data["type3"] = "type3"
data["type4"] = "type4"

data_string = json.dumps(data)
sock.sendto(data_string, (addr[0], 36963))
...
...

我是 Java 新手,所以我可能犯了一些愚蠢的错误。请帮忙。

最佳答案

在你的java代码中,你使用一个1024字节的缓冲区来接收udp数据包,如果你没有收到足够的字节,它只会被部分填充。 receivePacket.getData() 只是返回此缓冲区。

当您将其转换为字符串时,当然剩余的字节将填充之前缓冲区中的内容(在本例中为零字节,但如果您之前将其用作接收缓冲区,也可以填充内容) .

获取接收到的数据的正确方法是使用DatagramPacketgetLength()getOffset()方法:

strData = new String(receivePacket.getData(), receivePacket.getOffset(), receivePacket.getLength());

关于java - 在 Python 和 Java 数据报套接字之间传递 JSON 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16190811/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com