时间同步程序 命令行2.0版

 1 //Server
 2 #include <stdio.h>
 3 #include <Winsock2.h>
 4 #pragma comment(lib, "ws2_32.lib")
 5 
 6 int main()
 7 {
 8     WORD wVersionRequested;
 9     WSADATA wsaData;
10     int err;
11 
12     wVersionRequested = MAKEWORD( 1, 1 );
13 
14     err = WSAStartup( wVersionRequested, &wsaData );
15     if ( err != 0 )
16     {
17         return 0;
18     }
19 
20     if ( LOBYTE( wsaData.wVersion ) != 1 ||
21             HIBYTE( wsaData.wVersion ) != 1 )
22     {
23         WSACleanup( );
24         return 0;
25     }
26     SOCKET sockSrv=socket(AF_INET,SOCK_STREAM,0);
27 
28     SOCKADDR_IN addrSrv;
29     addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
30     addrSrv.sin_family=AF_INET;
31     addrSrv.sin_port=htons(6000);
32 
33     bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));// 绑定端口
34 
35     listen(sockSrv,5);
36 
37     SOCKADDR_IN addrClient;// 连接上的客户端ip地址
38     int len=sizeof(SOCKADDR);
39     while(1)
40     {
41         SOCKET sockConn=accept(sockSrv,(SOCKADDR*)&addrClient,&len);// 接受客户端连接,获取客户端的ip地址
42         char sendBuf[50];
43         sprintf(sendBuf,"Welcome %s to here!",inet_ntoa(addrClient.sin_addr));// 组合消息发送出去
44         send(sockConn,sendBuf,strlen(sendBuf)+1,0);// 发送消息到客户端
45         char recvBuf[50];
46         recv(sockConn,recvBuf,50,0);// 接受客户端消息
47         printf("%s\n",recvBuf);
48         //closesocket(sockConn);//断开连接
49     }
50 
51     return 0;
52 }
 1 //Client
 2 #include <stdio.h>
 3 #include <Winsock2.h>
 4 #pragma comment(lib, "ws2_32.lib")
 5 
 6 int main()
 7 {
 8     WORD wVersionRequested;
 9     WSADATA wsaData;//WSAata用来存储系统传回的关于WinSocket的资料。
10     int err;
11 
12     wVersionRequested = MAKEWORD( 1, 1 );
13 
14     err = WSAStartup( wVersionRequested, &wsaData );
15     if ( err != 0 )
16     {
17         return 0;
18     }
19 
20     if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 )
21     {
22         WSACleanup( );
23         return 0;
24     }
25     SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);// AF_INET ..tcp连接
26     //初始化连接与端口号
27     SOCKADDR_IN addrSrv;
28     addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");//本机地址,服务器在本机开启
29     addrSrv.sin_family=AF_INET;
30     addrSrv.sin_port=htons(6000);// 设置端口号
31     connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//连接服务器
32     char recvBuf[50];
33     recv(sockClient,recvBuf,50,0);//接受数据
34     printf("%s\n",recvBuf);
35     send(sockClient,"hello",strlen("hello")+1,0);//发送数据
36     closesocket(sockClient);//关闭连接
37     WSACleanup();
38     
39     getchar();
40     
41     return 0;
42 }

 

于是乎:

时间同步程序如下:

 1 #include <stdio.h>
 2 #include <Winsock2.h>
 3 #include <windows.h>
 4 #pragma comment(lib, "ws2_32.lib")
 5 
 6 unsigned int getTime(void)
 7 {
 8     SOCKET sockClient=socket(AF_INET,SOCK_STREAM,0);// AF_INET ..tcp连接
 9     //初始化连接与端口号
10     SOCKADDR_IN addrSrv;
11     addrSrv.sin_addr.S_un.S_addr=inet_addr("132.163.4.103");//NTP地址
12     addrSrv.sin_family=AF_INET;
13     addrSrv.sin_port=htons(37);// 设置端口号
14     connect(sockClient,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));//连接服务器
15     char recvBuf[50];
16     unsigned int seconds = 0;
17     send(sockClient,(char*)&seconds,strlen("hello")+1,0);//发送数据
18 
19     //recv(sockClient,(char*)&seconds,4,2);//接受数据
20     recv(sockClient,(char*)&seconds,4,0);//接受数据
21     seconds = ntohl(seconds);
22     if(0 == seconds)
23     {
24         return 0;//接收失败,返回0 
25     }
26     printf("%u\n",seconds);
27     
28     closesocket(sockClient);//关闭连接
29     return seconds;
30 }
31 
32 void SetTime(unsigned long NTP_Time)
33 {
34     FILETIME ft;
35     SYSTEMTIME st;
36     st.wYear = 1900;
37     st.wMonth = 1;
38     st.wDay = 1;
39     st.wHour = 0;
40     st.wMinute = 0;
41     st.wSecond = 0;
42     st.wMilliseconds = 0;
43     SystemTimeToFileTime(&st, &ft);
44     LARGE_INTEGER li = *(LARGE_INTEGER*)&ft;
45     li.QuadPart += (LONGLONG)10000000 * NTP_Time;
46     ft = *(FILETIME*)&li;
47     FileTimeToSystemTime(&ft, &st);
48     SetSystemTime(&st);
49 }
50 int main()
51 {
52     WORD wVersionRequested;
53     WSADATA wsaData;//WSAata用来存储系统传回的关于WinSocket的资料。
54     int err;
55 
56     wVersionRequested = MAKEWORD( 1, 1 );
57 
58     err = WSAStartup( wVersionRequested, &wsaData );
59     if ( err != 0 )
60     {
61         return 0;
62     }
63 
64     if ( LOBYTE( wsaData.wVersion ) != 1 ||HIBYTE( wsaData.wVersion ) != 1 )
65     {
66         WSACleanup( );
67         return 0;
68     }
69 
70     unsigned int NTP_Time = 0;
71     while(1)
72     {
73         NTP_Time = getTime();
74         if(0 != NTP_Time)
75         {
76             SetTime(NTP_Time);
77         }
78         Sleep(1000);
79     }
80 
81     WSACleanup();
82 
83     getchar();
84 
85     return 0;
86 }

 

 

转载于:https://www.cnblogs.com/syrchina/archive/2013/01/06/2847852.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值