服务器

时间:2015-09-12 01:57:35

标签: c time udp

我正在使用UDP客户端向服务器发送消息。我还需要以微秒为单位计算RTT(往返时间)。我有两个变量(t1,t2),我希望将这些时间存储在.t1用于向服务器发送消息并且在客户端收到消息后立即使用t2。然后我想调用像difftime(t1,t2);这样的函数来显示这个时间差。我有#include <time.h>作为预处理器,但我不知道我应该为t1和t2使用什么数据类型。在谷歌搜索time.h手册页中,我看到了一些名为suseconds_t的数据类型(如果我理解正确的话,类似于使用time_t),但我不确定如何使用它。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

您可以使用struct timevalgettimeofday()

struct timeval t1, t2;

gettimeofday(&t1, NULL);
// send packet and receive response
gettimeofday(&t2, NULL);

然后你可以使用这样的函数来计算差异:

struct timeval diff_timeval(struct timeval t2, struct timeval t1)
{
    struct timeval result;

    result.tv_sec = t2.tv_sec - t1.tv_sec;      // subtract seconds
    result.tv_usec = t2.tv_usec - t1.tv_usec;   // subtract microseconds
    // microsecond result could be negative, ex. 2.1 - 1.9 = 1 sec - 800000 microseconds
    // if so, subtract one second and add 1000000 microseconds
    while (result.tv_usec < 0) {
        result.tv_usec += 1000000;
        result.tv_sec--;
    }
    return result;
}