code:
#include "stdafx.h" #include <windows.h> #include <windowsx.h> #include <WINSOCK2.H> #include "resource.h" #include "MainDlg.h" #define HIGHTIME 21968699 #define LOWTIME 4259332096 /* */ BOOL WINAPI Main_Proc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch(uMsg) { HANDLE_MSG(hWnd, WM_INITDIALOG, Main_OnInitDialog); HANDLE_MSG(hWnd, WM_COMMAND, Main_OnCommand); HANDLE_MSG(hWnd,WM_CLOSE, Main_OnClose); } return FALSE; } BOOL Main_OnInitDialog(HWND hwnd, HWND hwndFocus, LPARAM lParam) { return TRUE; } void Main_OnCommand(HWND hwnd, int id, HWND hwndCtl, UINT codeNotify) { switch(id) { case IDC_OK: { SocketTest(); } break; default: break; } } void Main_OnClose(HWND hwnd) { EndDialog(hwnd, 0); } void SocketTest() { ////在连接中加上 WSOCK32.LIB WSADATA wsaData; //初始化Socket库 WSAStartup(MAKEWORD(2,0),&wsaData); //创建 SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); SOCKADDR_IN sa; sa.sin_family=AF_INET; //设置连接服务器端的端口 sa.sin_port = htons(IPPORT_TIMESERVER);//端口号 //218.107.63.213是ping smtp.163.com出来的 sa.sin_addr.S_un.S_addr = inet_addr("218.107.63.213");//www.time.ac.cn-210.72.145.8 if(connect(sock,(SOCKADDR *)&sa,sizeof(sa))==SOCKET_ERROR) { ShowError(); return; } /* //接收连接到的消息1 TCHAR buff[256]; ZeroMemory(buff,sizeof(buff)/sizeof(TCHAR)); recv(sock,buff,sizeof(buff)/sizeof(TCHAR),0); MessageBox(NULL,buff,"返回消息",MB_OK); //发消息1 TCHAR msg[]="QUIT "; send(sock,msg,sizeof(msg)/sizeof(TCHAR),0); ZeroMemory(buff,sizeof(buff)/sizeof(TCHAR)); recv(sock,buff,sizeof(buff)/sizeof(TCHAR),0); MessageBox(NULL,buff,"返回消息",MB_OK); */ //接收连接到的消息2 unsigned long ulTime=0; recv(sock,(char*)&ulTime,sizeof(unsigned long),0); ulTime=ntohl(ulTime);//把网络字节序转化为本机字节序 TCHAR buff1[256]={0}; wsprintf(buff1,"%i",ulTime); MessageBox(NULL,buff1,"返回消息",MB_OK);//获取到的时间不对,www.time.ac.cn有问题,直接放到 http://tool.chinaz.com/Tools/unixtime.aspx 转换都不对。 ////把unix时间转化为系统时间 SYSTEMTIME st; UINT64 uiCurtime,uiBasetime,uiResult; uiBasetime=((UINT64)HIGHTIME<<32)+LOWTIME; uiCurtime=(UINT64)ulTime*(UINT64)10000000; uiResult=uiBasetime+uiCurtime; uiResult=uiBasetime; FileTimeToSystemTime((LPFILETIME)&uiResult,&st); TCHAR buff[256]={0}; wsprintf(buff,"%d年%d月%d日 %d:%d:%d",st.wYear,st.wMonth,st.wDay,st.wHour+8,st.wMinute,st.wSecond); MessageBox(NULL,buff,"返回消息",MB_OK); //设置系统时间 //SetSystemTime(&st); closesocket(sock); WSACleanup(); } void ShowError() { TCHAR* lpMsgBuf; FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER| //自动分配消息缓冲区 FORMAT_MESSAGE_FROM_SYSTEM, //从系统获取信息 NULL,GetLastError(), //获取错误信息标识 MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),//使用系统缺省语言 (LPTSTR)&lpMsgBuf, //消息缓冲区 0, NULL); MessageBox(NULL,lpMsgBuf,"",MB_ICONERROR); }