1

私はudpパケットの送信者と受信者を実装しました。送信者から受信者までのトランザクションの時間を計算したい..

送信者コード:

void senderFunc() {
/*some other code */
if((s1 = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)) == -1)
    error_handler("\nERROR: in Socket\n");
    memset((char *) &me, 0, sizeof(me));
    me.sin_family = AF_INET;
    me.sin_port = PORT;
    if (inet_aton(G_IP, &me.sin_addr)==0)
    {
        fprintf(stderr, "inet_aton() failed\n");
        exit(1);
    }
    printf("\Tick - %d : %s",cntr++,str);
    sprintf(b1, "%s",str);  // Some Information in b1 buffer to transfer 
    if(sendto(s1, b1, sizeof(b1),0,(struct sockaddr *) &me,n)==-1)
    error_handler("\nERROR: in sendto()\n");
    close (s1);
    return;
    }
}

受信者コード:

int receiverFunc () {
    struct sockaddr_in other, me;
    int s2, n, i = 1;
    char b2[BUFLEN];//, b2[BUFLEN];
    s2 = socket(AF_INET, SOCK_DGRAM,0);
    me.sin_family = AF_INET;
    me.sin_port = PORT;
    me.sin_addr.s_addr = htonl(INADDR_ANY);
    bind(s2,(struct sockaddr *)&me, sizeof(me));
    n=sizeof(other);
    int incr = 0;
    while (i){
        recvfrom (s2,b2,BUFLEN,0,(struct sockaddr *) &other, &n);
        printf ("\nSubnet 2: Tick - %d : %s",incr++, b2);
    }
    return 0;
}

送信者から受信者にパケットを送信していると仮定して、このトランザクション間の時間をどのように計算できるか教えてください。では、その時間をどのように計算できますか?

このフォーラムからいつも最高の回答をありがとう..私はあなたの別の最高の回答を探しています..

ありがとう

ラヒ。

4

2 に答える 2

1

私はあなたが必要だと思います:

1)同じタイムサーバー(ntp)からクライアント、サーバーを同期して、それらが同じ時間であることを確認します。

クライアント側:

2) 現在の時刻を取得し、timestart を使用して udp パッケージを送信します

#include <sys/time.h>

struct timeval timestart;
gettimeofday(&timestart, NULL);

...
//put timestart to  your buffer
...

サーバー側:

3) 時間構造を抽出し、現在の時間と比較します。

#include <sys/time.h>

...
//get timestart from your buffer
...

struct timeval timeend;
gettimeofday(&timeend, NULL);

long diff_msec = (timestart.tv_sec  - timeend.tv_sec) / 1000 + (timestart.tv_usec  - timeend.tv_usec);
于 2012-06-05T11:27:36.770 に答える
0

片方の端からの単純なエコー要求/応答のラウンドトリップの時間を計り、2で割ります。ネットワーク速度が両方向で同じであると想定しているため、厳密な手順ではありませんが、球場の数値が得られます。

于 2012-06-05T11:59:47.643 に答える