1

問題: Solaris RPC で、サーバーから構造体を返しています。私はそれを静的に宣言しました。

ただし、クライアントでは、一部の値は値ではなく 00 です。直前の値を出力しています

サーバーリターンコール、問題ありません。しかし、同じ print ステートメントがクライアントにジャンク値を与えています。

    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 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 043 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

サーバーとクライアントのコードを自分で書く代わりに、強力な rpcgen を使用してください。- オプション -a like を使用して .x ファイルをコンパイルします。

 ~$ rpcgen -a filename.x 
. - クライアントとサーバーのファイルが自動生成されます。- サーバー ファイルでは、必要なタイプの静的変数が「result」という名前で生成されます - 構造体メンバーを結果のメンバーに割り当てます。- クライアント側で、それらを抽出します。

問題は解決されます。これを試してみてください!

于 2012-05-18T02:26:29.417 に答える
0

全体的な状況はわかりませんが、RPC リクエストを送受信するときに、データのサイズが正しくなく、ゼロが生成される場合があります。のサイズを標準化するメカニズムがサーバーとクライアントの両方に配置されていますstruct enc_replyか? 32 ビット システムが 64 ビット システムにデータを送信し、sizeof()異なるアーキテクチャ間で予測できない結果をもたらす構造体のサイズを決定するために使用する同様のケースを見てきました。

于 2012-04-26T19:51:32.370 に答える