RPC函数返回struct;客户端的价值垃圾

时间:2012-04-26 19:35:13

标签: c rpc

问题:在Solaris RPC中,我从服务器返回一个结构。我已经宣布它是静态的。

但在客户端中,某些值为00而不是值。我正在打印之前的值

服务器返回调用,很好。      但是相同的打印语句在客户端中给出了垃圾值。

    struct enc_request{
            int enc_len;
            unsigned char enc_msg[700];
    };

    in server proc:
    static enc_reply reply_e;
    return (&reply_e);

任何人都可以对错误提出一些看法。

输出:  原始回复发送 114 105 107 104 051 089 076 069 097 083 051 100 053 078 066 054 054 109 106 106 077 055 102 056 114 043 121 103 068 103 073 115 109 043 087 108 111 080 118 052 110 080 114 047 065 104 097 097 051 084 068 080 102 065 054 080 114 073 116 106 084 084 110 109 088 076 116 110 070 087 105 104 043 111 104 074 074 066 052 052 066 120 098 116 107 047 104 089 115 080 097 119 097 111 103 043

收到回复 114 105 107 104 051 089 076 069 097 083 051 100 053 078 066 054 054 109 106 106 077 055 102 056 114 043 121 103 068 103 073 115 109 043 087 108 111 080 118 052 110 080 114 047 065 104 097 097 051 084 068 080 102 065 054 080 114 073 116 106 084 084 110 109 088 076 116 110 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000

2 个答案:

答案 0 :(得分:0)

我不知道整个情况但是在发出和接收RPC请求时,数据的大小可能不正确而产生零。服务器和客户端上是否存在标准化struct enc_reply大小的机制?我见过类似的情况,32位系统将数据发送到64位,并使用sizeof()来确定结构的大小,这会在不同的架构中产生不可预测的结果。

答案 1 :(得分:0)

不要自己编写服务器和客户端代码,而是使用rpcgen的强度。 - 使用选项-a编译.x文件:

 ~$ rpcgen -a filename.x 
。 - 客户端和服务器文件将自动生成。 - 在服务器文件中,生成所需类型的静态变量,名称为“result” - 将结构成员分配给结果的成员。 - 在客户端,提取它们。

问题将得到解决。试试吧!