资源简介
这个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程序
相关资源
- SLE-12-SP5-Server-DVD-x86_64-GM-DVD1.iso
- Ubuntu 18.04 Desktop and Server 百度云链接
- telnet-server-1.2-134.22.x86_64
- VMware vCenter Server 6.0 u2版本
- Server10.5许可文件.rar
- 利用udig美化shape文件并由Geoserver发布
- ArcGIS 10.1 for Server
- mips gdbserver二进制文件
- Delphi 下ServerSocket和ClientSocket 的通信
- SublimeServer
- E4A安卓App Server/Client调试助手
- arcgis server 10.3 crack ecp
- ArcGIS for Server10.1正式版授权文件.ecp
- Qt使用tcp实现的简单服务端和客户端(
- ArcGis Server10.2 授权文件
- 网狐6603 资源配置文件工具ServerParam
- 基于UDP的P2P小Demo (穿透NAT)delphi源码
- WebSocket delphi server 服务端 源代码.r
- ArcgisServer10.7.1许可.rar
- DogServer67.exe
- 在vmware虚拟机上安装windows_server_2003
- 员工绩效管理系统最终版
- KepserverEx 三菱PLC设置
- SharePointServer2016企业版Enterprise序列号
- linux下的tftp server端的源码
- VisualSVN Server增加网页密码修改功能
- arcgis server 10.3
- TCP服务器端和客户端收发测试程序亲
- kepserver UA教程.docx
- 2003 server standard edition 产品密钥和其它
评论
共有 条评论