资源简介
这个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
- 上一篇:基于labview提取所有轮廓曲线
- 下一篇:MSP430—DS18B20程序
相关资源
- ArcGIS Server 10.4.x 系列 授权文件
- Borland Socket Server Fix2.0 D7
- Borland Socket Server程序 包含D6和D7源码
- Azure开发教程:Azure_Serverless_Computing
- USB.Over.Network.Server 注册机
- Uninstall_Cortana_WINCLIENT.CN.rar
- B/S 网上订餐系统
- 代码客:G-TcpServer(IOCP) 1.0 正式版及
- 用IdFTPServer写的一个FTPServer程序
- Radmin Server-3.5 完美绿色破解版x32 x64通
- Linux版的telnet安装包telnet、telnet-serv
- Intel(R) 82579V网卡驱动for server20033
- 最好用的FTP服务器
- 基于IBM eserver x440+FAStT700+VMware的系统整
- IBM CAW for Microsoft Cluster Server 简介
- 飞康NSS、CDP力保Windows Server 2008数据迁
- 64bit.server2008或win10下安装git服务器
- VisualSVN Server 4.0.0 企业破解版
- 网上购物商城系统完整版
- Server 2008R2 AD服务器搭建图解
- Windows Server 2012 R2 上部署与安装AD域
- eServer z 系列服务器数据挖掘解决方案
- SAP Business One 中文版 + IBM eServer x 系列
- IBM eServer xSeries 445 EXP400在Linux下的双
- IBM eServer xSeries 365 EXP400在Windwos下的双
- IBM eServer xSeries 电信服务器
- 联想System X 3650 M5210RAID卡驱动 for ser
- WindowsServer2003.WindowsXP-KB926139-v2-x64-EN
- Wing FTP Server FTP服务器 v6.1.9
- Coinstor Backup Server数据容灾解决方案
评论
共有 条评论