【问题标题】:How send data from Python to Java using Protobuf?如何使用 Protobuf 将数据从 Python 发送到 Java?
【发布时间】:2017-04-13 20:52:29
【问题描述】:

Java 客户端

byte[] aReceiveData = new byte[1024];
DatagramPacket aReceivePacket = new DatagramPacket(aReceiveData,  aReceiveData.length);
aServerSocket.receive(aReceivePacket);

ByteArrayInputStream aInput = new ByteArrayInputStream(aReceiveData);


Message test = Message.parseDelimitedFrom(aInput);

错误

"Protocol message contained an invalid tag (zero)."

Python 服务器

mensagem = estoque_pb2.Message()
mensagem.type=1
mensagem.id=requestId
mensagem.methodId="test"
mensagem.obfReference="objectRef"
mensagem.arguments=resultado
return mensagem.SerializeToString()

self.udp.sendto(mensagem,self.client)

我无法使用 protobuf 从 python 向 java 发送数据,感谢任何帮助!

【问题讨论】:

  • 是的,端口是正确的,可以看到数据收到了,错误在"parseDelimitedFrom"的时候

标签: java python tcp udp protocol-buffers


【解决方案1】:

接收到的数据包可以小于 1024 字节,因此只需要在接收到的字节范围内创建 ByteArrayInputStream。

parseDelimitedFrom 方法用于解析分隔消息。实际上它读取消息长度,然后读取消息本身。据我了解,您的缓冲区仅包含消息。因此,您必须使用 parseFrom 方法。

byte[] data = new byte[1024];
DatagramPacket pkt = new DatagramPacket(data, data.length);
socket.receive(pkt);

ByteArrayInputStream input = new ByteArrayInputStream(pkt.getData(), pkt.getOffset(), pkt.getLength());

Message test = Message.parseFrom(input);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-11
    • 2019-05-07
    • 2015-07-16
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    相关资源
    最近更新 更多