Проблема с отправкой сериализованных данных XDR с C на Python

Я пытаюсь сериализовать структуру в C с использованием XDR и отправить сериализованные данные на Python через сокет TCP.

Я попытался использовать xdrmem_create() для создания потока XDR, вызова соответствующих функций пакета и передачи массива символов в сокет, чтобы добиться этого, но я получаю ошибку EOF на стороне Python, когда пытаюсь десериализовать поток.

Я смог успешно выполнить эту операцию между

C-сервер и C-клиент, также между

сервер Python и клиент Python.

Я получаю сообщение об ошибке только тогда, когда я использую его с C и Python.

С фрагмент

#include<rpc/rpc.h>
....
  xdrmem_create(&xdrs, arr, MAXLENGTH, XDR_ENCODE);

  if(!xdr_person(&xdrs,&pkt)){
    printf("ERROR");
  };
.....
send(new_fd, arr, MAXLENGTH, 0)

Фрагмент Python

import xdrlib
.....
data = s.recv(4)

unpacker = xdrlib.Unpacker(data)
message_size = unpacker.unpack_uint()

data = s.recv(message_size)

unpacker.reset(data)

person={}

person["name"] = unpacker.unpack_string().decode()
person["age"] = unpacker.unpack_int()
person["flag"] = unpacker.unpack_bool()
person["errEnum"] = unpacker.unpack_enum()

Интересно, есть ли несоответствие между способами сериализации данных в C и Python.

0 ответов

Другие вопросы по тегам