1
下午好。Google Protobuf - C++和Python之間的UDP通信 - google.protobuf.message.DecodeError:解壓縮需要長度爲4的字符串參數
我想在CPP中的一個框架和Python中的另一個框架之間發送消息。我遵循了同樣的過程中顯示: Serialize C++ object to send via sockets to Python - best approach?
在Python我的服務器代碼:
import socket
from DiceData_pb2 import DiceData
UDP_PORT=1555
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind(("", UDP_PORT))
dicedata = DiceData()
while True:
data, addr = sock.recvfrom(1024)
print data
dicedata.ParseFromString(data)
print ("gyrox = {0}".format(dicedata.gyrox))
print("gyroy = {0}".format(dicedata.gyrox))
print("gyroz = {0}".format(dicedata.gyroz))
print("accelx = {0}".format(dicedata.accelx))
print("accely = {0}".format(dicedata.accely))
print("accelz = {0}".format(dicedata.accelz))
print("roll = {0}".format(dicedata.roll))
print("pitch = {0}".format(dicedata.pitch))
print("yaw = {0}".format(dicedata.yaw))
print("side = {0}".format(dicedata.side))
print("certainty = {0}".format(dicedata.certainty))
print("time = {0}".format(dicedata.time))
的.proto文件如下:
package prototest;
message DiceData {
required float gyrox = 1;
required float gyroy = 2;
required float gyroz = 3;
required float accelx = 4;
required float accely = 5;
required float accelz = 6;
required float roll = 7;
required float pitch = 8;
required float yaw = 9;
required int32 side = 10;
required float certainty = 11;
required string time = 12;
}
我知道的通信工作,因爲服務器收到第一條消息並將其打印爲垃圾。然而,到達ParseFromString行之後,下面的錯誤發生:
Traceback (most recent call last):
File "server.py", line 13, in <module>
dicedata.ParseFromString(data)
File "/usr/local/lib/python2.7/dist-packages/google/protobuf/message.py", line 185, in ParseFromString
self.MergeFromString(serialized)
File "/usr/local/lib/python2.7/dist-packages/google/protobuf/internal/python_message.py", line 1095, in MergeFromString
raise message_mod.DecodeError(e)
google.protobuf.message.DecodeError: unpack requires a string argument of length 4
有誰知道我怎麼能解決這個問題?我知道該字符串不是空的,因爲在前一行中有垃圾被打印,但我似乎無法將字符串轉換回數據結構。