windows api创建网络时钟

本文介绍了一个使用C/C++实现的网络时间同步程序。该程序通过Socket连接到指定的时间服务器,并从服务器获取时间戳来更新本地时间显示。文章展示了如何初始化Socket库、创建Socket连接以及进行时间同步的具体代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

VOID CALLBACK NetTimerProc (  HWND hwnd, UINT message, UINT iTimerID, DWORD dwTime)

        
{
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);
//ping www.ac.time.cn--->201.72.145.8
sa.sin_addr.S_un.S_addr = inet_addr("216.229.0.179"); 
//为什么不用设置客户端的端口,难道不需要客户端的端口吗?
if(connect(sock,(SOCKADDR *)&sa,sizeof(sa))==SOCKET_ERROR)
{
ShowError();
return;
}


unsigned long ulTime = 0;
recv(sock,(char *)&ulTime,sizeof(unsigned long),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);


TCHAR strNetTime[256];
ZeroMemory(strNetTime,sizeof(strNetTime)/sizeof(char));
wsprintf(strNetTime,"%i年 %i月 %i日 %i : %i : %i",st.wYear,st.wMonth,st.wDay,st.wHour+8,st.wMinute,st.wSecond);
HWND hwndStaticTime = GetDlgItem(hwnd,IDC_STATICTIME);
Edit_SetText(hwndStaticTime,strNetTime);


closesocket(sock);
WSACleanup();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值