RPC:当数组太大时,xdr_bytes“无法编码参数”

Posted

技术标签:

【中文标题】RPC:当数组太大时,xdr_bytes“无法编码参数”【英文标题】:RPC: xdr_bytes "Can't encode arguments" when array is too large 【发布时间】:2012-12-03 00:16:59 【问题描述】:

我正在尝试通过 RPC 发送一个数组,但是当数据数组变得很大时,我收到“RPC:无法编码参数”。据我所见,不到 10Kb。

这是失败的那一行。

xdr_bytes (xdrs, (char **)&objp->data, (uint*)&objp->len, objp->len))

这是被引用的结构。

struct dataStruct 
    unsigned int len;
    u_char *data;
;

有没有办法修复这个错误,或者有其他方法可以发送任意大的数组?

【问题讨论】:

你试过 bool_t xdr_opaque(XDR *xdrs, char *cp, unsigned int cnt) 吗? 同样的结果。原来这是我使用的网络协议(UDP)的问题。搜索对 xdr_opaque 的引用确实将我带到了一个确实有我答案的手册页部分! 【参考方案1】:

在查看其他 RPC 命令的联机帮助页后,我发现:

“警告:使用 UDP 有其缺点。由于基于 UDP 的 RPC 消息最多只能容纳 8 KB 的编码数据,因此这种传输不能用于需要大参数或返回大结果的过程。”

我确实是在使用UDP,切换到TCP后消息正常发送到服务器。

【讨论】:

以上是关于RPC:当数组太大时,xdr_bytes“无法编码参数”的主要内容,如果未能解决你的问题,请参考以下文章

当图像放大太大时,UIPinchGestureRecognizer 表现得很有趣

wpf:当文本对于 1 行来说太大时,使文本块高度扩大

当整个文件太大时如何在python中使用mmap

当vector的大小太大时,如何解决C++中内存不足的问题?

当 flex 项目变得太大时,iPad Safari 会忽略边距

ListView下面的WPF按钮 - 当ListView太大时消失