Internet time 时间同步(转载)


从网络上同步时间,在PPC中可以起到自动校准时间的作用, 时间的设置很简单,我这里就不多写了,主要是获得时间数据。

1、获得因特网的时间数据。


int GetInternetTime(ULONG &ulTime)
{
    SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if (INVALID_SOCKET == sock)
    {
        return -1;
    }
    sockaddr_in servAddr;
    servAddr.sin_family = AF_INET;
    servAddr.sin_port = htons(37);

    // http://tf.nist.gov/tf-cgi/servers.cgi 
    // nist1-sj.WiTime.net 64.125.78.85 San Jose, California    
    servAddr.sin_addr.S_un.S_addr = inet_addr("64.125.78.85");

    int i;
    BOOL bCont = FALSE;
    for (i = 0; i < RETRY_TIMES; i++)
    {
        if (-1 == connect(sock, (sockaddr *)&servAddr, sizeof(servAddr)))
        {
            continue;
        }
        else
        {
            bCont = TRUE;
            break;
        }
    }
    int nRecv = SOCKET_ERROR;
    if (bCont)
    {
        bCont = FALSE;
        for (i = 0; i < RETRY_TIMES; i++)
        {
            nRecv = recv(sock, (char *)&ulTime, sizeof(ulTime), 0);
            if (nRecv > 0)
            {
                ulTime = ntohl(ulTime);
                bCont = TRUE;
                break;
            }
            else
            {
                continue;
            }
        }
    }
     
    closesocket(sock);

    if (FALSE == bCont)
    {
        return -2;
    }
    return 0;
}

2、由Internet 时间转化为系统时间:


void ITimeToSTime(SYSTEMTIME &st, const ULONG ulTime)
{
    FILETIME ft;
    SYSTEMTIME stBase;

    memset(&stBase, 0, sizeof(stBase));
    stBase.wYear = 1900;
    stBase.wMonth = 1;
    stBase.wDay = 1;
    SystemTimeToFileTime(&stBase, &ft);
    LONGLONG * pLLong = (LONGLONG *) &ft;
    *pLLong += (LONGLONG) 10000000 * ulTime;
    FILETIME ft_local;
    FileTimeToLocalFileTime(&ft, &ft_local);
    FileTimeToSystemTime(&ft_local, &st);
}

3、在吧转化好的系统时间设置成系统的时间,大功告成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值