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日的
这句怎么理解?
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;