【问题标题】:Pass in 127.0.0.1 to RPC client将 127.0.0.1 传入 RPC 客户端
【发布时间】:2014-03-22 13:25:57
【问题描述】:

我遵循了创建 RPC 客户端和服务器here 的简单示例。基本上,步骤是:

  1. 创建一个有效的 .x 文件——在本例中为 add.x
  2. rpcgen -a -C add.x
  3. 在 add_server.c 中添加 printf() 行,检查服务器是否收到客户端请求
  4. make -f Makefile.add
  5. ./addserver
  6. 在另一个终端,运行./addclient localhost

这应该在第一个终端打印一些东西,但在我的情况下它似乎没有打印任何东西。我正在使用 ssh 在学校服务器上运行代码。也许我应该指定端口,即 127.0.0.1?无论如何,我不确定这是否能解决问题。有什么想法吗?


add.x 的代码是:

struct numbers {
    int num1;
    int num2;
};

program ADDITION {
    version ADDITION_1 {
        int ADD(numbers)=1;
    } = 1;
} = 0x2fffffff;

所有其他文件都是由 rpcgen 从 add.x 生成的


add_server.c 中添加的 printf() 是:

/*
 * This is sample code generated by rpcgen.
 * These are only templates and you can use them
 * as a guideline for developing your own functions.
 */

#include "add.h"

int *
add_1_svc(numbers *argp, struct svc_req *rqstp)
{

    static int  result;

    /*
     * insert server code here
     */
    printf("Got the client request!");
    return(&result);
}

【问题讨论】:

  • 端口是计算机上的连接点(例如 HTTP 通常使用端口 80),而不是 IP 地址,所以忽略它。 rpcinfo 有没有告诉你什么?除此之外,如果没有代码,真的很难猜出可能出了什么问题。
  • 是的,rpcinfo 确实告诉我一些事情。

标签: c rpc


【解决方案1】:

哦! RPC 服务器正在缓冲其输出。我通过挖掘add_svc.c 代码来添加调试语句找到了它。 远程调用修复它之后打印一些东西。

不过,这是一个糟糕的解决方案,因为该代码是自动生成的。

相反,您有两个选择。

  • 在调用printf() 之后,使用fflush(stdout); 刷新输出缓冲区
  • 在输出字符串的末尾添加回车符 (\n)。

两者都可以正常工作。

关于这背后的原因,请参阅this question

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-24
    • 2016-09-15
    • 1970-01-01
    • 2013-01-26
    • 2011-06-23
    • 2013-01-12
    • 2016-10-13
    相关资源
    最近更新 更多