• 大小: 19KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-16
  • 语言: 其他
  • 标签: sntp  server  

资源简介

这个sntp服务器代码精简,完成了sntp服务的网络时间同步功能,适合在嵌入式系统。

资源截图

代码片段和文件信息

/********************************************************
*gcc main.c  sntp_time.c -o ntpd.exe
*
*
*
********************************************************/


#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include “sntp_time.h“
#include “main.h“




int main(int argc char *argv[])
{
int sock = -1;
unsigned int addrLen = 0;
struct sockaddr_in toAddr;  //客户端的网络地址。
struct sockaddr_in serverAddr;  //服务器端的网络地址。
struct NtpBasicInfo  ntpServerPacket;  //服务器端接收到的客户端数据包。
struct NtpBasicInfo  ntpClientPacket;  //服务器端发送给客户端的数据包。

int iRcvLen = 0;
char acRcvBuf[128];
 
int i = 0;
int iOpt = 0;
int iTZMinutesWest = -1; //
char cNoShowHelp = 0x00;
struct tm *pTm;
unsigned int uiSec = 0;
unsigned int uiData = 0;

while((iOpt = getopt(argc argv “hs:“)) != -1)
{
switch(iOpt)
{
case ‘h‘:
break;
case ‘s‘:
                iTZMinutesWest = atoi(optarg);
if(0 != (iTZMinutesWest % 60))
{
printf(“number of minutes is invalid!\n\n“);
}
else
{
cNoShowHelp = 0x01;
}
break;
default:
break;
}
}

if(0x01 != cNoShowHelp)
{
show_help();
return 0;
}

if(0x00 != set_timezone(iTZMinutesWest))
{
return 0;
}

  //socket创建。
sock = socket(AF_INETSOCK_DGRAMIPPROTO_UDP);
if(sock < 0)
{
 printf(“create socket failure.\r\n“);
 exit(0);
}

  //端口绑定。
memset(&serverAddr0sizeof(serverAddr));
serverAddr.sin_family=AF_INET;
serverAddr.sin_addr.s_addr=htonl(INADDR_ANY);
serverAddr.sin_port = htons(123);//sntp 端口号为123
if(bind(sock (struct sockaddr*)&serverAddr sizeof(serverAddr))<0)
{
 printf(“bind() failure.\r\n“);
 close(sock);
 exit(1);
}
 
while(1)
{
//接收sntp客户端请求。
addrLen = sizeof(toAddr);
memset(acRcvBuf0sizeof(acRcvBuf));
if(0 > (iRcvLen = recvfrom(sockacRcvBuf1280(struct sockaddr*)&toAddr&addrLen)))
{
 printf(“recvfrom() failure.\n“);
 close(sock);
 exit(1);
}

//获取服务器端接收到数据时的时间。
get_current_ntp_time(&uiSec);
uiSec = htonl(uiSec);
memset(&ntpServerPacket 0 sizeof(struct NtpBasicInfo));
ntpServerPacket.m_ReceiveTimestamp.m_dwInteger = uiSec;

//数据处理。
memset(&ntpClientPacket 0 sizeof(struct NtpBasicInfo));
memcpy(&ntpClientPacket acRcvBuf sizeof(struct NtpBasicInfo));
ntpServerPacket.m_LiVnMode = 0x24;
ntpServerPacket.m_Stratum = 0x02;
ntpServerPacket.m_Poll = 0x03;
ntpServerPacket.m_Precision = 0xec;
ntpServerPacket.m_RootDelay = 0x5f020000;
ntpServerPacket.m_RootDispersion = 0xd0090000;
uiData = 0x00;//0x0eed4fc1;
memcpy(&(ntpServerPacket.m_ReferenceID)&uiData sizeof(uiData)); 

//设置本服务器参考的网络sntp服务器时间,在此直接赋值为本机时间。
get_current_ntp_time(&uiSec);
uiSec = htonl(uiSec);
ntpServerPacket.m_ReferenceTime

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2013-08-11 15:16  sntp_server_20130624\
     文件        4096  2013-05-10 09:26  sntp_server_20130624\sntp_server.IAB
     文件         368  2013-05-10 09:26  sntp_server_20130624\sntp_server.IAD
     文件        4096  2013-05-10 09:26  sntp_server_20130624\sntp_server.IMB
     文件         368  2013-05-10 09:26  sntp_server_20130624\sntp_server.IMD
     文件          16  2013-08-11 15:16  sntp_server_20130624\sntp_server.PFI
     文件         776  2013-08-11 15:16  sntp_server_20130624\sntp_server.PO
     文件        1760  2013-05-16 20:48  sntp_server_20130624\sntp_server.PR
     文件        8608  2013-05-16 20:51  sntp_server_20130624\sntp_server.PRI
     文件        9284  2013-08-11 15:16  sntp_server_20130624\sntp_server.PS
     文件          38  2013-06-24 14:06  sntp_server_20130624\sntp_server.SearchResults
     文件       25472  2013-08-11 15:16  sntp_server_20130624\sntp_server.WK3
     目录           0  2013-08-11 15:17  sntp_server_20130624\src\
     文件        5222  2013-06-27 14:50  sntp_server_20130624\src\main.c
     文件          82  2013-06-24 13:09  sntp_server_20130624\src\main.h
     文件       12226  2013-06-24 13:59  sntp_server_20130624\src\ntpd.exe
     文件           0  2013-06-24 14:00  sntp_server_20130624\src\ntpdlog.txt
     文件        4027  2013-06-24 14:05  sntp_server_20130624\src\sntp_time.c
     文件        2580  2013-06-24 14:05  sntp_server_20130624\src\sntp_time.h

评论

共有 条评论