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