Winsock编程基继承基础(网络对时程序)
#include <iostream> #include <stdio.h> #include "InitSock.h" using namespace std; void SetTimeFromTP(ULONG ulTime); int main(void) { CInitSock initSock; //创建套接字 SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (s == INVALID_SOCKET) { cout << "Failed socke()" << endl; return 0; } //创建套接字之后如果首先sendto可以不绑定 //若首先recvfrom则需要绑定 //填写远程地址信息 sockaddr_in addr; addr.sin_family = AF_INET; addr.sin_port = htons(37); addr.sin_addr.S_un.S_addr = inet_addr("129.6.15.28 "); //可在http://tf.nist.gov/service/time-servers.html得到IP //连接服务器 if (connect(s, (sockaddr*)&addr, sizeof(addr)) == -1) { cout << "Failed connect()" << endl; return 0; } //等待接收时间协议返回的时间,学习Winsock I/O模型后最好使用异步I/O ULONG ulTime = 0; int nRecv = recv(s, (char*)&ulTime, sizeof(ulTime), 0); if (nRecv > 0) { ulTime = ntohl(ulTime); SetTimeFromTP(ulTime); cout << "成功与服务器时间同步" << endl; cout << "接收到的数据: " << ulTime << endl; } else { cout << "服务器不能确认当前时间" << endl; } closesocket(s); getchar(); return 0; } void SetTimeFromTP(ULONG ulTime) { //Windows文件时间是一个64位的值,是从1601年1月1日中午12:00到现在的时间间隔 //单位是1/1000 0000秒即1000万分之1秒(100-nanosecond) FILETIME ft; SYSTEMTIME st; //首先将基准时间(1900.1.1.0.0.0.0)转换为windows文件时间 st.wYear = 1900; st.wMonth = 1; st.wDay = 1; st.wHour = 0; st.wMinute = 0; st.wSecond = 0; st.wMilliseconds = 0; SystemTimeToFileTime(&st, &ft); //然后将Time Protocol使用基准时间加上已经逝去的时间即ulTime LONGLONG *pLLong = (LONGLONG*)&ft; //注意文件时间的单位 *pLLong += (LONGLONG)10000000 * ulTime; //再将时间转换回来,更新系统时间 FileTimeToSystemTime(&ft, &st); //SetSystemTime(&st); cout << st.wYear << "年" << st.wMonth << "月" << st.wDay << "日" << st.wHour + 8<< "时" //... << st.wMinute << "分" << st.wSecond << "秒" << endl; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix