zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    注释驱动的 Spring cache 缓存介绍--转载
    AOP 的利器:ASM 3.0 介绍
    字符串比较报错
    Performing a thread dump in Linux or Windows--reference
    Linux 精准获取进程pid--转
    /bin/bash^M: bad interpreter: 没有那个文件或目录--转载
    linux 进程综合指令
    Sending e-mail with Spring MVC---reference
    Spring XD 1.1 M2 and 1.0.3 released---support kafka
    大数据框架对比:Hadoop、Storm、Samza、Spark和Flink——flink支持SQL,待看
  • 原文地址:https://www.cnblogs.com/Clin/p/2788340.html
Copyright © 2011-2022 走看看