设置系统时间 系统时间网络更新

本文提供了一段使用C语言通过网络连接接收时间并调整系统时间的代码示例。代码中首先创建socket连接到指定IP地址和端口,然后接收时间数据,将其转换为网络字节序,并调用自定义函数setTimeFromTP进行时间设置。

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

代码:

//根据返回的时间设置系统时间
void setTimeFromTP(ULONG ulTime)
{
	FILETIME ft;
	SYSTEMTIME st;

	//将基准时间转换成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);

	LONGLONG* pLLong = (LONGLONG*)&ft;
	*pLLong += (LONGLONG)10000000*ulTime;
	FileTimeToSystemTime(&ft, &st);
	::SetSystemTime(&st);
}

void main()
{
	CInitSock initSock;
	SOCKET s = ::socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
	if (s == INVALID_SOCKET)
	{
		printf("socket error...");
		return;
	}
	sockaddr_in servAddr = {0};
	servAddr.sin_family = AF_INET;
	servAddr.sin_port = ::htons(37);
	servAddr.sin_addr.S_un.S_addr = ::inet_addr("69.25.96.13"); //别用210.72.145.44这个IP, 这是天朝的 常TMD不返回值
	if (SOCKET_ERROR == ::connect(s, (sockaddr*)&servAddr, sizeof(servAddr)))
	{
		printf("connect error..");
		return;
	}

	//接收时间
	ULONG ulTime = 0;
	int nRecv = ::recv(s, (char*)&ulTime, sizeof(ulTime), 0);
	if (nRecv > 0)  //收到数据
	{
		ulTime = ::ntohl(ulTime);
		setTimeFromTP(ulTime);
	}
	else
	{
		printf("recv error...");
		return;
	}
	
	::closesocket(s);
	printf("*******************************");
	getchar();
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值