• Winsock编程基继承基础(网络对时程序)


    #include <iostream>
    #include <stdio.h>
    
    #include "InitSock.h"
    
    using namespace std;
    
    void SetTimeFromTP(ULONG ulTime);
    
    int main(void)
    {
        CInitSock initSock;
        //创建套接字
        SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if (s == INVALID_SOCKET)
        {
            cout << "Failed socke()" << endl;
            return 0;
        }
        //创建套接字之后如果首先sendto可以不绑定
        //若首先recvfrom则需要绑定
    
        //填写远程地址信息
        sockaddr_in addr;
        addr.sin_family = AF_INET;
        addr.sin_port = htons(37);
        addr.sin_addr.S_un.S_addr = inet_addr("129.6.15.28 "); //可在http://tf.nist.gov/service/time-servers.html得到IP
    
        //连接服务器
        if (connect(s, (sockaddr*)&addr, sizeof(addr)) == -1)
        {
            cout << "Failed connect()" << endl;
            return 0;
        }
    
        //等待接收时间协议返回的时间,学习Winsock I/O模型后最好使用异步I/O
        ULONG ulTime = 0;
        int nRecv = recv(s, (char*)&ulTime, sizeof(ulTime), 0);
        if (nRecv > 0)
        {
            ulTime = ntohl(ulTime);
            SetTimeFromTP(ulTime);
            cout << "成功与服务器时间同步" << endl;
            cout << "接收到的数据: " << ulTime << endl;
        }
        else
        {
            cout << "服务器不能确认当前时间" << endl;
        }
        
        closesocket(s);
        
        getchar();
        return 0;
    }
    
    void SetTimeFromTP(ULONG ulTime)
    {
        //Windows文件时间是一个64位的值,是从1601年1月1日中午12:00到现在的时间间隔
        //单位是1/1000 0000秒即1000万分之1秒(100-nanosecond)
        FILETIME ft;
        SYSTEMTIME st;
        //首先将基准时间(1900.1.1.0.0.0.0)转换为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);
        //然后将Time Protocol使用基准时间加上已经逝去的时间即ulTime
        LONGLONG *pLLong = (LONGLONG*)&ft;
        //注意文件时间的单位
        *pLLong += (LONGLONG)10000000 * ulTime;
        //再将时间转换回来,更新系统时间
        FileTimeToSystemTime(&ft, &st);
        //SetSystemTime(&st);
        cout << st.wYear << ""
            << st.wMonth << ""
            << st.wDay << ""
            << st.wHour + 8<< ""    //...    
            << st.wMinute << ""
            << st.wSecond << "" << endl;
            
    }
     
  • 相关阅读:
    Pytorch手写线性回归
    numpy+sklearn 手动实现逻辑回归【Python】
    如何用TensorFlow实现线性回归
    进程、线程和携程的通俗解释【刘新宇Python】
    即时通信WebSocket 和Socket.IO
    gRPC【RPC自定义http2.0协议传输】
    Django中MySQL事务的使用
    模拟电磁曲射炮_H题 方案分析【2019年电赛】【刘新宇qq522414928】
    Gitflow工作流
    雪花算法【分布式ID问题】【刘新宇】
  • 原文地址:https://www.cnblogs.com/chenxingyang/p/9748123.html
Copyright © 2020-2023  润新知