首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Linux中使用C通过套接字发送XDR结构

在Linux中使用C通过套接字发送XDR结构
EN

Stack Overflow用户
提问于 2013-07-07 22:44:43
回答 1查看 1.2K关注 0票数 0

我正在编写一个通过套接字发送XDR结构的服务器。使用Wireshark,我看到我的客户端正确地向服务器发送了一条XDR消息,但是我没有看到任何数据从服务器发送到客户端。但代码似乎是正确的,因为它与客户端使用的代码是相同的。我发现问题出在xdr_Response上。上面有什么错误吗?感谢所有人

代码语言:javascript
复制
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);

通过以下方式:

代码语言:javascript
复制
struct Response {
    bool_t error;
    float result;
};
typedef struct Response Response;
EN

回答 1

Stack Overflow用户

发布于 2016-06-13 04:06:50

我不是XDR方面的专家,但我找到了一种通过套接字连接(在TCP上)从XDR接收数据的方法。首先,您必须执行recv来接收来自客户端的数据,然后调用xdrmem_create(),它需要您将用于读取的XDR结构、一个缓冲区(字符串)、recv()的返回值,并且您必须使用XDR_DECODE,因为您是从已编码的XDR中写入数据。

你必须像这样写一些东西:

代码语言:javascript
复制
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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17513140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档