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)

我不能用PythBoF发送数据到Python到Java,谢谢任何帮助!

最佳答案

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

09-28 09:05