ONC RPC编程——返回时间

原创 2013年12月06日 11:32:19
test.x
program TESTPROG {
   version VERSION {
     string TEST(string) = 1;
   } = 1;
} = 87654321;

87654321是RPC程序编号,还有VERSION版本号为1,都是给RPC服务程序用的。同时指定程序接受一个字符串参数。

(1).rpcgen test.x

将生成三个源文件:
test_clnt.c  test.h  test_svc.c

 

(2).rpcgen -Sc -o test_clnt_func.c test.x

生成一个客户端源文件test_clnt_func.c: 


(3).rpcgen -Ss -o test_srv_func.c test.x

 生成服务端源文件test_srv_func.c:


 (4)至此,我们就可以编译生成程序来运行了。

用下面的命令编译生成服务端程序test_server:
gcc -Wall -o test_server test_clnt.c test_srv_func.c test_svc.c

用下面的命令编译生成客户端程序test_client:
gcc -Wall -o test_client test_clnt_func.c test_clnt.c


test_srv_func.c 

/*
* This is sample code generated by rpcgen.
* These are only templates and you can use them
* as a guideline for developing your own functions.
http://jiaogen.com
*/
#include <time.h>
#include "test.h"   
char **
test_1_svc(char **argp, struct svc_req *rqstp)
{
        static char * result;
        static char tmp_char[128];
        time_t rawtime;
        /*
         * insert server code here
         */
        if( time(&rawtime) == ((time_t)-1) ) {
                strcpy(tmp_char, "Error");
                result = tmp_char;
                return &result;
        }
        sprintf(tmp_char, "服务器当前时间是 :%s", ctime(&rawtime));
        result = tmp_char;
        return &result;
}

test_clnt_func.c

/*
 * 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 "test.h"


void
testprog_1(char *host)
{
        CLIENT *clnt;
        char * *result_1;
        char * test_1_arg;
        test_1_arg = (char *)malloc(128);
#ifndef DEBUG
        clnt = clnt_create (host, TESTPROG, VERSION, "udp");
        if (clnt == NULL) {
                clnt_pcreateerror (host);
                exit (1);
        }
#endif  /* DEBUG */
        result_1 = test_1(&test_1_arg, clnt);
        if (result_1 == (char **) NULL) {
                clnt_perror (clnt, "call failed");
        }
        if (strcmp(*result_1, "Error") == 0) {
                fprintf(stderr, "%s: could not get the time\n", host);
                exit(1);
        }
        printf("收到消息 ... %s\n", *result_1);
#ifndef DEBUG
        clnt_destroy (clnt);
#endif   /* DEBUG */
}

int
main (int argc, char *argv[])
{
	char *host;

	if (argc < 2) {
		printf ("usage: %s server_host\n", argv[0]);
		exit (1);
	}
	host = argv[1];
	testprog_1 (host);
exit (0);
}

启动服务端程序后运行客户端程序如下:
./test_client 127.0.0.1
收到消息 ... 


问题:

(1)

服务器无法启动,错误如下:
Cannot register service: RPC: Unable to receive; errno = Connection refused
unable to register (TESTPROG, VERSION, udp).
解决方法:系统没有安装portmap或者没有启动portmap端口映射。
$ls /etc/init.d/    
如果没有portmap则安装之
    $sudo apt-get install portmap
如果有了,则启动
    $sudo /etc/init.d/portmap start
还可以使用chkconfig设置系统开机启动的服务项,如将portmap加入开机启动:
    $sudo chkconfig --level 2 -s portmap on


(2)服务器启动依旧有问题,错误如下:

Cannot register service: RPC: Authentication error; why = Client credential too weak 

unable to register (X_PROG, X_VERS, udp)

解决方法:

i).sudo -i  service portmap stop

ii).sudo  -i rpcbind -i -w

iii).sudo -i service portmap start

onc rpc for windows

  • 2008年03月11日 12:53
  • 4.74MB
  • 下载

高效编程——C++测试代码运行时间方法

C++测试代码运行时间方法方法一最常用的执行时间测试方法,利用clock函数,精确度能达到ms级。...

django 数据库 时间数据传输Bug修改以及体会 ——Einste的django结队编程<一>

django数据库  时间数据传输Bug修改与体会--Einste的django结队编程         本人虽然不是第一次使用django来做一些轻量级的数据库开发,但是之前的开发都是做一些简单...
  • Einste
  • Einste
  • 2016年10月25日 18:48
  • 39

《unix高级环境编程》文件和目录——文件时间

/********** * 文件时间 * 根据stat的结构可以知道,文件有三种时间: * st_atime 最后访问时间,即最后访问文件的时间 * st_mtime 最后修改...

《unix高级环境编程》系统数据文件和信息——时间和日期

unix内核的基本服务时间是计算自国际标准时间公元1970年

《unix高级环境编程》系统数据文件和信息——时间和日期

unix内核的基本服务时间是计算自国际标准时间公元1970年1月1日00:00:00以来经过的秒数,以时间类型time_t表示。以下根据时间的不同显示进行记录各种时间函数。 当前时间time ...

2、CRM2011编程实战——设置窗体某一项的值为服务器时间

需求:设置窗体中某个控件的值为服务器时间。 解决方案:通过一个一般处理程序获取服务器时间,然后通过ajax形式获取到此服务器时间并赋值给界面控件。 1、新建一个一般处理程序GetSererTime...

编程之美——2.20 程序理解和时间分析

最近在看《编程之美》,为找工作面试做准备。该书中2.20程序理解和时间分析一题没有给出解答,所以简单写一下我自己的答案。 题目如下: 阅读以下C#代码,回答问题:          using ...
  • wens07
  • wens07
  • 2011年08月26日 11:20
  • 1822

浅析 Linux 中的时间编程和实现原理二—— 硬件和 GLibC 库的细节

简介: 本文试图完整地描述 Linux 系统中 C 语言编程中的时间问题。主要内容包括应用程序中的时间编程方法;时钟硬件简介;Glibc 时间函数的实现以及 Linux 内核对时间的支持和实现原理。这...
  • HiRuyue
  • HiRuyue
  • 2013年09月15日 11:17
  • 603

时间——休息,娱乐,编程

我原以为自己能控制自己多编程,少娱乐。我定下目标每天早上六点起床,发现自己的困乏之多,早上六点起床,浏览网页看看新闻读读报,一个小时候去吃早餐,吃过早餐就开始犯困,午餐后也是,下午更甚。对于午睡虽备受...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ONC RPC编程——返回时间
举报原因:
原因补充:

(最多只允许输入30个字)