2012-04-13 8 views
0

にヌル手順を使用して、ラウンドトリップ時間の計算(またはpingを実行しますか)?これはまた助けることができるのアドレッシングSUN RPC(ONC/RPC):私は計算したり、クライアントとサーバ間のRTT(Round Trip Time)を推定するにはどうすればよいC

チュートリアルやサンプル。私は何をすべきか。ここ

+0

http://mattgemmell.com/2008/12/08/what-have-you-tried/ –

+0

ヨアヒムこんにちは。無礼なやり方でさえ助けてくれてありがとう。ここで私は質問に答えた時点で初心者でした(私はまだ初心者です):私はタイトルキーワード(キーワードはSUN + RPC + ONC + RTT +往復+ラウンドトリップ時間+ ping + nullプロシージャ+ c +見積もり+クライアント+サーバー)。私はRPCに関するすべてのドキュメントを読んだ。私はいくつかのRFC標準シートを読んでいました。 (私は彼らが私の心を吹いて覚えています。)私は何も思い付かなかった。だから以下の答えは私が見つけた唯一の解決策です。それは貴重である理由は... – duru

+0

...です。とにかくあなたの貴重だが失礼な貢献に感謝します。 – duru

答えて

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

tigranを持っています。

+0

はあなたに非常に多くのtigranありがとうございます。これはおそらくwww全体のいくつかの例の1つです。私はまだ試してみる時間がありませんでしたが、すぐに答えてみるつもりです。再度、ありがとうございます。 – duru

+0

tigran、おかげで再び、これはそれをしません。 – duru

関連する問題