如何计算udp包发送和接收的时间

时间:2012-06-05 10:56:06

标签: performance time timer udp

我实现了一个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;
}

任何人都可以请帮助我,我怎么能计算这个交易之间的时间,假设我发送一个数据包从发送者到接收者。那我怎么计算那个时间?

感谢您对此论坛的最佳回复。我正在寻找您的另一个最佳回复..

由于

Rahee。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

从一端到一个简单的回应请求/响应的往返时间并除以2。这不是一个严格的程序,因为它假设网络速度在两个方向都是相同的,但它给你一个大概的数字。