0

ソケットを介して XDR 構造体を送信するサーバーを作成しています。Wireshark を使用すると、クライアントが XDR メッセージをサーバーに正しく送信していることがわかりますが、サーバーからクライアントにデータが送信されていません。しかし、クライアントに使用されているものと同じであるため、コードは正しいようです。問題は xdr_Response にあることがわかりました。それに間違いはありませんか?ありがとうございます

XDR xdrs_w;
Response y;

stream_socket_w = fdopen(s, "w");
xdrstdio_create(&xdrs_w, stream_socket_w, XDR_ENCODE);

y.error = 0; 
y.result = 5.7;

xdr_Response(&xdrs_w, &y);
fflush(stream_socket_w);

と:

struct Response {
    bool_t error;
    float result;
};
typedef struct Response Response;
4

1 に答える 1

2

私は XDR の専門家ではありませんが、(TCP 上で) ソケット接続を使用して XDR からデータを受信する方法を見つけました。まず、recv を実行してクライアントからデータを受信し、次に を呼び出しますxdrmem_create()。これには、読み取りに使用する XDR 構造、バッファー (文字列)、recv() の戻り値が必要です。成文化された XDR から書いているため、XDR_DECODE を使用してください。

次のように書く必要があります。

l = recv(socket, buffer, BUFFERDIM, 0);
xdrmem_create(&xdrs_w, buff, l, XDR_DECODE );
if(!xdr_Response(&xdrs_w, &y) {
fprintf(stdout, "Error XDR\n");
}
fprintf(stdout, "Received: %f", y.result);

y記入する必要があります。 は とbufferは異なりbuffます。私は fd_open を使用する代わりにこれを行うことを好みます。xdr を作成して を呼び出すだけxdr_Responseです。

于 2016-06-12T20:06:50.343 に答える