#python #protocol-buffers #protobuf-net
#python #протокол-буферы #protobuf-net
Вопрос:
Я создаю сервер C # и клиентское приложение python с сокетной связью. Сервер отправляет сериализованный список объектов клиенту, но я понятия не имею (и не смог найти), как десериализовать список в python. Любая помощь будет оценена.
Комментарии:
1. Вы пробовали использовать
pickle
?2. Что вы пробовали? Вы на самом деле используете
protoobuf
на стороне сервера? Вы пробовали учебник ?3. Да, я использую protobuf. Я могу десериализовать один объект без проблем, но я понятия не имею, как это сделать со списками. Вот почему я ничего не мог попробовать, потому что я не знаю. @DarinDouglass Я новичок в python, но, думаю, pickle не будет общаться с .net. Вот почему я использую protobuf
4. PS Да, я видел официальный учебник, но в нем не упоминается десериализация списка
Ответ №1:
Хорошо, я нашел решение, если кому-то интересно. Хитрость заключается в создании нового типа сообщения и добавлении исходного по мере повторения. Вот как
message TransactionPackets {
repeated TransactionPacket packet = 1;
}
message TransactionPacket {
required int32 trans_id = 1;
required string user_id = 2;
required int64 date = 3;
}
Теперь я могу просто десериализовать список объектов, вызвав TransactionPackets .ParseFromString()
Ответ №2:
Проверьте это:
«Формат проводного буфера протокола не является самоограничивающимся, поэтому анализаторы буфера протокола не могут самостоятельно определить, где заканчивается сообщение. Самый простой способ решить эту проблему — записать размер каждого сообщения перед тем, как писать само сообщение. Когда вы считываете сообщения обратно, вы считываете размер, затем считываете байты в отдельный буфер, а затем выполняете синтаксический анализ из этого буфера. «
https://developers.google.com/protocol-buffers/docs/techniques
Комментарии:
1. Я использую protobuf-net. Я не знаю, как он сериализует данные и / или куда он помещает размер каждого сообщения: (