1

问题:在 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);

任何人都可以请给出一些关于什么是错的想法。

output: original reply send 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 054 080 080 114 073 116 106 106 106 106 106 084 084 084 110 109 088 076 116 110 070 070 070 087 087 104 104 104 10431043 111 104 074 074 074 074 066 052 0666666666666666666666666666666666666666666666666666666666666666666666666666666666666666661999999ENEMON 043

reply received 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

4

2 回答 2

0

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

于 2012-04-26T19:51:32.370 回答
0

与其自己编写服务器和客户端代码,不如使用 rpcgen 的优势。- 使用选项 -a 编译 .x 文件:

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

问题将得到解决。试试这个!

于 2012-05-18T02:26:29.417 回答