• socket学习(二)


    1.授时服务器

    utcnist.colorado.edu(IP:128.138.140.44)

    stdtime.gov.hk(IP:210.0.235.14)

    2.网络字节序和本机字节序的转换

    htons:把unsigned short类型从主机序转换到网络序

    htonl:把unsigned long类型从主机序转换到网络序

    ntohs:把unsigned short类型从网络序转换到主机序

    ntohl:把unsigned long类型从网络序转换到主机序

    3.授时服务器返回的事格林尼治时间,中国是东8区。

    4.相关代码:

     1 #define HIGHTIME 21968699 // 21968708 // Jan 1, 1900 FILETIME.highTime
     2 #define LOWTIME 4259332096 // 1604626432 // Jan 1, 1900 FILETIME.lowtime
     3 void DoSocket()
     4 {
     5     WSADATA wsaData;
     6     WSAStartup(MAKEWORD(2, 0), &wsaData);
     7     SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
     8     SOCKADDR_IN sa;
     9     sa.sin_family = AF_INET;
    10 
    11     sa.sin_port = htons(IPPORT_TIMESERVER);
    12     //utcnist.colorado.edu(IP:128.138.140.44)
    13     //stdtime.gov.hk(IP:210.0.235.14)
    14     sa.sin_addr.S_un.S_addr = inet_addr("128.138.140.44");
    15     if (connect(sock, (SOCKADDR *)&sa, sizeof(sa)) == SOCKET_ERROR)
    16     {
    17         ShowError();
    18         return;
    19     }
    20 
    21     unsigned long ulTime = 0;
    22     recv(sock, (char *)&ulTime, sizeof(unsigned long), 0);
    23 
    24     ulTime = ntohl(ulTime);//注意网络与本机的字节序转换
    25 
    26     SYSTEMTIME st;
    27     UINT64 uiCurTime, uiBaseTime, uiResult;
    28     uiBaseTime = ((UINT64) HIGHTIME << 32) + LOWTIME;
    29     uiCurTime = (UINT64)ulTime * (UINT64)10000000;
    30     uiResult = uiBaseTime + uiCurTime;
    31     FileTimeToSystemTime((LPFILETIME)&uiResult, &st);
    32 
    33     TCHAR buff[256];
    34     ZeroMemory(buff, sizeof(buff) / sizeof(TCHAR));
    35     wsprintf(buff, TEXT("%i年%i月%i日  %i:%i:%i"), st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
    36     MessageBox(NULL, buff, "", 0);
    37 
    38     closesocket(sock);
    39     WSACleanup();
    40 }
    41 
    42 void ShowError()
    43 {
    44     TCHAR* lpMsgBuf;
    45     FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|
    46         FORMAT_MESSAGE_FROM_SYSTEM,
    47         NULL, GetLastError(),
    48         MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
    49         (LPTSTR)&lpMsgBuf,
    50         0,
    51         NULL);
    52     MessageBox(NULL, lpMsgBuf, "", MB_ICONERROR);
    53 }
  • 相关阅读:
    你应该知道的那些Android小经验
    ArrayList和LinkedList的区别
    Android 监听apk安装替换卸载广播
    关于 Android 进程保活,你所需要知道的一切
    Java Thread 总结
    Android分包原理
    Flask web开发 处理POST请求(登录案例)
    Flask web开发 简单介绍
    编写存储过程导出oracle表数据到多个文本文件
    Linux 特殊符号使用: 倒引号`的使用
  • 原文地址:https://www.cnblogs.com/Clin/p/2788340.html
Copyright © 2020-2023  润新知