繁体   English   中英

在Linux中使用C发送XDR结构

[英]Send a XDR struct over a socket with C in Linux

我正在编写一个通过套接字发送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;

我不是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 。请注意bufferbuff不同。 我更喜欢这样做而不是使用fd_open,你只需要创建xdr并调用xdr_Response

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM