为什么小弟我写的网络授时小程序总是不能正常运行?
为什么我写的网络授时小程序总是不能正常运行??
下面是我的关键代码:
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);
sa.sin_addr.S_un.S_addr = inet_addr("210.72.145.8");
connect(sock,(SOCKADDR *)&sa,sizeof(sa));
unsigned long ulTime;
TCHAR buff[256];
recv(sock, (char *)&ulTime, sizeof(ulTime), 0);
ulTime = ntohl(ulTime);
SYSTEMTIME st;
UINT64 uiCurTime, uiBaseTime, uiResult;
uiBaseTime = ((UINT64) HIGHTIME << 32) + LOWTIME;
uiCurTime = (UINT64)ulTime * (UINT64)10000000;
uiResult = uiBaseTime + uiCurTime;
FileTimeToSystemTime((LPFILETIME)&uiResult, &st);
memset(buff, 0, sizeof(0));
wsprintf(buff, "%i年%i月%i日 %i:%i:%i", st.wYear, st.wMonth, st.wDay, st.wHour+8, st.wMinute, st.wSecond);
MessageBox(hwnd, buff, TEXT("当前时间"), MB_OK);
每次运行的时候总是请求超时,偶尔成功的时候每次返回的时间都不对,而且是同一个值
如图

每次都是这个时间,不知道为什么。
我考虑到了网络字节序和主机字节序的问题,但是怎么会每次接受到的时间都不变呢??而且往往接收不到,是请求超时
------解决方案--------------------
在
而
你把
下面是我的关键代码:
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);
sa.sin_addr.S_un.S_addr = inet_addr("210.72.145.8");
connect(sock,(SOCKADDR *)&sa,sizeof(sa));
unsigned long ulTime;
TCHAR buff[256];
recv(sock, (char *)&ulTime, sizeof(ulTime), 0);
ulTime = ntohl(ulTime);
SYSTEMTIME st;
UINT64 uiCurTime, uiBaseTime, uiResult;
uiBaseTime = ((UINT64) HIGHTIME << 32) + LOWTIME;
uiCurTime = (UINT64)ulTime * (UINT64)10000000;
uiResult = uiBaseTime + uiCurTime;
FileTimeToSystemTime((LPFILETIME)&uiResult, &st);
memset(buff, 0, sizeof(0));
wsprintf(buff, "%i年%i月%i日 %i:%i:%i", st.wYear, st.wMonth, st.wDay, st.wHour+8, st.wMinute, st.wSecond);
MessageBox(hwnd, buff, TEXT("当前时间"), MB_OK);
每次运行的时候总是请求超时,偶尔成功的时候每次返回的时间都不对,而且是同一个值
如图
每次都是这个时间,不知道为什么。
我考虑到了网络字节序和主机字节序的问题,但是怎么会每次接受到的时间都不变呢??而且往往接收不到,是请求超时
------解决方案--------------------
在
connect(sock,(SOCKADDR *)&sa,sizeof(sa));就失败了。
而
recv(sock, (char *)&ulTime, sizeof(ulTime), 0);同样失败。
你把
unsigned long ulTime;改成
unsigned long ulTime = 0;看看结果是什么呢?