Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从C向Python发送XDR序列化数据时出现问题_C_Xdr - Fatal编程技术网

从C向Python发送XDR序列化数据时出现问题

从C向Python发送XDR序列化数据时出现问题,c,xdr,C,Xdr,我正在尝试使用XDR序列化C中的结构,并通过tcp套接字将序列化的数据发送到python 我尝试使用xdrmem_create()创建一个XDR流,调用适当的包函数并将字符数组传递给套接字,以实现这一点,但在尝试对流进行反序列化时,python端出现了EOF错误 我成功地完成了这项手术 C服务器和C客户端,也在 python服务器和python客户端 只有在与C和Python一起使用时,才会出现错误 C代码段 #include<rpc/rpc.h> .... xdrmem_cre

我正在尝试使用XDR序列化C中的结构,并通过tcp套接字将序列化的数据发送到python

我尝试使用xdrmem_create()创建一个XDR流,调用适当的包函数并将字符数组传递给套接字,以实现这一点,但在尝试对流进行反序列化时,python端出现了EOF错误

我成功地完成了这项手术

C服务器和C客户端,也在

python服务器和python客户端

只有在与C和Python一起使用时,才会出现错误

C代码段

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

  if(!xdr_person(&xdrs,&pkt)){
    printf("ERROR");
  };
.....
send(new_fd, arr, MAXLENGTH, 0)
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中的数据序列化方式是否不匹配。

首先要检查:
s.recv(n)
从套接字收集最多
n
字节,但允许收集少于
n
的字节。您的程序必须准备好循环,直到它收集到您要解码的XDR blob所需的全部数据。这包括
消息大小的4个字节--
recv
返回的字节可能少于4个,尽管可能性不大。要快速查看短的
recv
是否是问题的原因,请暂时保持程序不变,并在每次
recv
后打印
len(数据)
。我检查并能够接收指定数量的字节,我想这可能是XDR记录的问题。你知道如何使用xdrrec_create()吗?我不清楚readit()/writeit()函数的期望值。