如何使用Protobuf将数据从Python发送到Java?

时间:2016-11-29 18:20:41

标签: java python tcp udp protocol-buffers

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,感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

接收的数据包可能小于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);