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_DECODE 因为您是从已编纂的 XDR 编写的。

你必须写这样的东西:

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 回答