2012-04-13 59 views
0

如何计算或估计客户端和服务器之间的RTT(往返时间)?SUN RPC(ONC/RPC):使用空过程计算往返时间(或ping)C

解决此问题的教程或示例也有帮助。

+0

http://mattgemmell.com/2008/12/08/what-have-you-tried/ – 2012-04-13 05:24:49

+0

Joachim嗨。感谢您尝试提供帮助,即使是以粗鲁的方式。下面是我在问这个问题的时候做了一个新手(我仍然是一个新手):我用标题关键字的每种可能的组合搜索了网页(关键字是:SUN + RPC + ONC + RTT +往返+往返时间+ ping + null程序+ c +估计+客户端+服务器)。我阅读了关于RPC的每个文档。我甚至读过一些RFC标准表。 (我记得他们在想我。)我没有想出任何东西。所以下面的答案是我能找到的唯一解决方案。那是... – duru 2012-07-29 21:57:02

+0

...为什么它很珍贵。无论如何,谢谢你的宝贵但粗鲁的贡献。 – duru 2012-07-29 21:57:21

回答

0

这里我做什么:

#include <rpc/rpc.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <sys/times.h> 
#include <fcntl.h> 
#include <time.h> 

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

    enum clnt_stat status; 
    CLIENT *handle; 
    struct timeval t; 
    clock_t rtime; 
    struct tms dumm; 
    int count = 100000; 
    int i; 
    time_t now; 
    char stamp[27]; 
    int programm; 
    int version; 

    if (argc != 4) { 
     printf("Usage: rpcping <host> <program> <version>\n"); 
     exit(1); 
    } 

    /* 
    * Create Client Handle 
    */ 
    programm = atoi(argv[2]); 
    version = atoi(argv[3]); 
    handle = clnt_create(argv[1], programm, version, "tcp"); 
    if (handle == NULL) { 
     printf("clnt failed\n"); 
     exit(1); 
    } 

    /* 
    * use 30 seconds timeout 
    */ 
    t.tv_sec = 30; 
    t.tv_usec = 0; 

    while (1) { 
     rtime = times(&dumm); 
     for (i = 0; i < count; i++) { 
      status = clnt_call(handle, 0, (xdrproc_t) xdr_void, 
       NULL, (xdrproc_t) xdr_void, NULL, t); 

      if (status == RPC_SUCCESS) { /* NOP */ } 
     } 
     now = time(NULL); 
     ctime_r(&now, stamp); 
     stamp[strlen(stamp) - 1] = '\0'; 
     fprintf(stdout, "[%s]: Speed: %2.4fs.\n", stamp, 
      count/((double) (times(&dumm) - rtime)/(double) sysconf(_SC_CLK_TCK))); 
     fflush(stdout); 
    } 

    clnt_destroy(handle); 
} 

我有一个多线程版本,以及

https://gist.github.com/2401404

蒂格兰。

+0

非常感谢Tigran。这可能是整个www上少数几个例子之一。我没有时间尝试它,但我会尝试将其标记为即将回答。再次,非常感谢。 – duru 2012-06-02 23:04:23

+0

Tigran,再次感谢,这是它。 – duru 2012-07-29 21:48:23