私のpythonアプリケーション内に "writeDelmitedTo()"というJavaアプリケーションから送信されたprotobufメッセージを受け取ろうとしています。Pythonで区切られたProtobufメッセージをTCP経由で受信
いくつかの調査の後、私はすでにこのコードを読んで、ソケットからメッセージを読み取り、デコードして解析しました。
data = sock.recv()
(size, position) = decoder._DecodeVarint(data, 0)
msg = MessageWrapper_pb2.WrapperMessage().ParseFromString(data[position:position + size])
google.protobuf.message.DecodeErrorは次のとおりです。切り詰められたメッセージの例外。
同様の問題が発生した場合や、区切り文字のデータをソケットから読み取って正しく解析する方法を知っている人はいますか?
は編集:
これは私のために働いたソリューションです。
def read_java_varint_delimited_stream(sock):
buf = []
data = sock.recv()
rCount = len(data)
(size, position) = decoder._DecodeVarint(data, 0)
buf.append(data)
while rCount < size+1:
data = sock.recv(size+1-rCount)
rCount += len(data)
buf.append(data)
return b''.join(buf), size, position
def readMessage(sock):
data, size, position = read_java_varint_delimited_stream(sock)
msg = MessageWrapper_pb2.WrapperMessage()
msg.ParseFromString(data[position:position + size])
return msg
計算されたサイズには何か問題がありましたが、ループが決して終わらないように常に大きかったです。私は関数を少し変更しました(上記参照)。 – ElSchuer