梦的忧伤 发表于 2017-6-2 13:22:31

设置系统时间 系统时间网络更新

代码:
//根据返回的时间设置系统时间
void setTimeFromTP(ULONG ulTime)
{
        FILETIME ft;
        SYSTEMTIME st;

        //将基准时间转换成windows文件时间
        st.wYear = 1900;
        st.wMonth = 1;
        st.wDay = 1;
        st.wHour = 0;
        st.wMinute = 0;
        st.wSecond = 0;
        st.wMilliseconds = 0;

        SystemTimeToFileTime(&st, &ft);

        LONGLONG* pLLong = (LONGLONG*)&ft;
        *pLLong += (LONGLONG)10000000*ulTime;
        FileTimeToSystemTime(&ft, &st);
        ::SetSystemTime(&st);
}

void main()
{
        CInitSock initSock;
        SOCKET s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if (s == INVALID_SOCKET)
        {
                printf("socket error...");
                return;
        }
        sockaddr_in servAddr = {0};
        servAddr.sin_family = AF_INET;
        servAddr.sin_port = ::htons(37);
        servAddr.sin_addr.S_un.S_addr = ::inet_addr("69.25.96.13"); //别用210.72.145.44这个IP, 这是天朝的 常TMD不返回值
        if (SOCKET_ERROR == ::connect(s, (sockaddr*)&servAddr, sizeof(servAddr)))
        {
                printf("connect error..");
                return;
        }

        //接收时间
        ULONG ulTime = 0;
        int nRecv = ::recv(s, (char*)&ulTime, sizeof(ulTime), 0);
        if (nRecv > 0)//收到数据
        {
                ulTime = ::ntohl(ulTime);
                setTimeFromTP(ulTime);
        }
        else
        {
                printf("recv error...");
                return;
        }
       
        ::closesocket(s);
        printf("*******************************");
        getchar();
}
页: [1]
查看完整版本: 设置系统时间 系统时间网络更新