我有点疯狂试图弄清楚为什么这不起作用。 我正在使用sunrpc,但生成的服务器代码会抛出以下内容:
无法注册服务:RPC:无法编码参数
无法注册(MYRPC,MYRPC_V1,udp)。
我不知道为什么会这样。 我正在执行以下操作来生成存根:
$ rpcgen -NMC myrpc.x
这是我的XDR
struct imgdata{ opaque data; }; program MYRPC { version MYRPC_V1 { imgdata minify(imgdata) = 1; } = 1; } = 0x30D0D0DFF;
编译.x文件以创建客户端,服务器,xdr编组代码或标头时,我没有收到任何错误。 我还实现了rpc接口,但由于在我尝试启动生成的服务器(myrpc_svr.c)时抛出该错误,因此无法对其进行测试。
甚至引用此错误消息的参数是什么? 它不喜欢我在XDR中定义的函数的实现吗? 为什么编码参数会导致程序甚至无法注册?
我真的很惊讶这不是客户端错误消息
经过几个小时的浪费时间后,答案很简单: 程序编号超出范围 。
program MYRPC { version MYRPC_V1 { imgdata minify(imgdata) = 1; } = 1; } = 0x30D0D0DFF;
我的程序号0x30D0D0DFF在末尾包含一个额外的数字F
,导致该值超出允许的用户定义的程序编号,符合RFC 1831第7.3节中的规范。 应该是:
0x30D0D0DF 。
所以这只是我在编写XDR文件时发现的一个微妙的错字,但是如果其他人遇到同样的问题,我就把它留下来。 确保您的程序编号正确!
以上就是c/c++开发分享无法在远程过程调用中编码参数以进行服务器注册相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/544774.html