将127.0.0.1传递给RPC客户端

时间:2014-03-22 13:25:57

标签: c rpc

我遵循了创建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
  7. 这应该在第一个终端打印一些内容,但在我的情况下它似乎不打印任何东西。我正在使用ssh在学校服务器上运行代码。也许我应该指定端口,即127.0.0.1?无论如何,我不确定这是否能解决问题。有什么想法吗?


    add.x的代码是:

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

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


    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);
    }
    

1 个答案:

答案 0 :(得分:1)

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

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

相反,你有两个选择。

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

要么工作正常。

有关此背后的原因,请参阅this question