Tag: rpc

RPC使值在C中就地更改

背景 我正在为类编写基本的RPC客户端/服务器代码,其中一个要求是服务器端必须就地更改值。 最终目标是将矢量从客户端传递到服务器。 但由于我只是在学习RPC,所以我决定从基本的例子开始。 下面我有一个简单的代码,我在其中计算数字的平方。 对于这个例子,我想要就地改变结果。 问题 正如您在我的server.c看到的,我尝试就地更改了值。 但对于那些了解C的人来说,你已经可以看到我没有成功。 当调用./client localhost 4时,我的结果是4,因为我打印的是相同的值,我猜想它已经改变了,我原以为它不再是4.我怎样才能正确地改变原位值? client.c #include #include “square.h” int main(int argc, char **argv) { CLIENT *cl; square_in in; square_out *outp; if (argc != 3) //err_quit(“usage: client “); exit(0); cl = clnt_create(argv[1], SQUARE_PROG, SQUARE_VERS, “tcp”); in.arg1 = atol(argv[2]); if ( (outp = squareproc_1(&in, cl)) == NULL) //err_quit(“%s”, clnt_sperror(cl, […]

Rpc – 分段故障(核心转储)

我尝试用ubuntu中的RPC编程一个新程序,服务器执行正常,但我总是得到错误:执行客户端之后的分段错误(核心转储)这是我的代码 banque.x const max_cin = 8; typedef string typeCin; struct client { typeCin cin; float solde; }; typedef struct client client; struct cnMysql{ char * host; char * user; char * pass; }; typedef struct cnMysql cnMysql; program BANQUE { version Client { string Connect(cnMysql cn) = 0; string AddC(client c) = 1; client ConC(typeCin […]

rpcgen-在结构中传递一个字符串

我正在尝试使用rpcgen包将字符串作为网络结构的一部分传递。 这是我的IDL代码: struct param { char* name; int voterid; }; program VOTECLIENT_PROG { version VOTECLIENT_VERS { string ZEROIZE() = 1; string ADDVOTER(int) = 2; string VOTEFOR(param) = 3; string LISTCANDIDATES() = 4; int VOTECOUNT(string) = 5; } = 1; } = 0x2345111; 不知何故,该字符串被截断为服务器上的单个字符。 例如,如果我传递name =“abc”,我会在服务器上获得“a”。 由于存根中存在一些问题,看起来这种情况正在发生,但我似乎无法弄清楚错误的位置。 我的函数的客户端代码将字符串作为参数传递: void voteclient_prog_1(char *host, char* c, int id) { […]

RPC客户端给出无法编码参数

我正在尝试使用以下代码在RPC中编写最简单的客户端: #include #include #include int main(int argc, char *argv[]){ int stat; char out; char in=’f’; if(stat=callrpc(argv[1],0x20000001, 1, 1, (xdrproc_t)xdr_void, &in, (xdrproc_t)xdr_char, &out)!=0){ clnt_perrno(stat); exit(1); } exit(0); } 它编译,但当我尝试运行它时,它给了我一个“RPC:不能编码参数” 编辑:实际上服务器没有收到任何参数,也没有发回任何东西,这就是为什么我把xdr_void添加&in和&out以避免分段错误错误。

了解XDR规范以创建* .x文件

我一直在浏览互联网上的几个网站,并且实际上想知道我们如何在.x文件中编写规范以在.c文件中为RPC生成等效函数。 我访问过的每个网站都建议在* .x文件中使用以下类型的规范: program ADD_PROG { version ADD_VERS { int ADD(intpair) = 1; } = 1; } = 0x23451111; 因此,为了实际理解,我从一个名为ganglia的开源项目中获取了gm_protocol.x ,并使用rpcgen生成了等效的C源代码( gm_protocol_xdr.c )和C头文件( gm_protocol.h )。 [rohit@ganglia-server rpc]$ rpcgen -C gm_protocol.x [rohit@ganglia-server rpc]$ [rohit@ganglia-server rpc]$ ll total 24 -rw-rw-r– 1 rohit rohit 5786 Oct 28 17:52 gm_protocol.h -rw-rw-r– 1 rohit rohit 3485 Oct 28 15:04 gm_protocol.x […]

无法在远程过程调用中编码参数以进行服务器注册

我有点疯狂试图弄清楚为什么这不起作用。 我正在使用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中定义的函数的实现吗? 为什么编码参数会导致程序甚至无法注册? 我真的很惊讶这不是客户端错误消息

RPC无法解码TCP传输的参数

我正在研究基于此页面示例的multithreadingRPC服务器: http : //bderzhavets.blogspot.ca/2005/11/multithreaded-rpc-server-in-white-box.html 不幸的是,它没有完全开箱即用,在追逐错误一段时间之后,我发现服务器无法解码参数(基于squareproc_2的返回码)。 在函数serv_request调用squareproc_2_svc之后,服务器端的执行似乎停止了。 请参阅case: SQUAREPROC中的代码中的SQUAREPROC void *serv_request(void *data) { struct thr_data *ptr_data = (struct thr_data *)data; { square_in argument; square_out result; bool_t retval; xdrproc_t _xdr_argument, _xdr_result; bool_t (*local)(char *, void *, struct svc_req *); struct svc_req *rqstp = ptr_data->rqstp; register SVCXPRT *transp = ptr_data->transp; switch (rqstp->rq_proc) { case NULLPROC: printf(“NULLPROC called\n”); (void) […]