CSocket sockClient;
sockClient.Create(); //创建socket


CString strServer="time.ien.it";
sockClient.Connect((LPCTSTR)strServer, 37); // strServer:时间服务器网址; 37:端口号

DWORD dwTime = 0; //用来存放服务器传来的标准时间数据
unsigned char nTime[8]; //临时接收数据
// memset(nTime, 0, sizeof(nTime));

sockClient.Receive(nTime, sizeof(nTime)); //接收服务器发送来得4个字节的数据
sockClient.Close(); //关闭socket



dwTime += nTime[0] << 24; //整合数据
dwTime += nTime[1] << 16;
dwTime += nTime[2] << 8;
dwTime += nTime[3];

if(0 == dwTime) return FALSE;



//服务器传来的数据是自从1900年以来的秒数
//取得 1900~1970 的时间差(以秒数计算) ,放在dwSpan里面
COleDateTime t00( 1900, 1, 1, 0, 0, 0 ); // 1900.1.1 00:00:00 
COleDateTime t70( 1970, 1, 1, 0, 0, 0 ); // 1970.1.1 00:00:00 

COleDateTimeSpan ts70to00 = t70 - t00; 
DWORD dwSpan = (DWORD)ts70to00.GetTotalSeconds(); 
ASSERT( dwSpan == 2208988800L ); 

//把时间变为基于1970年的,便于用CTime处理
dwTime -= dwSpan;
//考虑网络延迟因素
dwTime += dwDely;
//构造当前时间的CTime对象
CTime timeNow = (CTime)dwTime;



*pTime = timeNow;得到的是1981年8月30日的

解决方案 »

  1.   

    CTime timeNow = (CTime)dwTime;
    这句怎么理解?
      

  2.   

    楼主:
       dwTime += nTime[0] << 24;        //整合数据    
        dwTime += nTime[1] << 16;
        dwTime += nTime[2] << 8;
        dwTime += nTime[3];你确定是网络序?要不换下主机序列看看?
       dwTime += nTime[0];        //整合数据    
        dwTime += nTime[1]*256;
        dwTime += nTime[2]*256*256;
        dwTime += nTime[3]*256*256*256;