| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2269 人关注过本帖, 1 人收藏
标题:连接NTP服务器,获取网络时间,请赐教
只看楼主 加入收藏
my2318
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:14
帖 子:289
专家分:640
注 册:2014-3-18
收藏
得分:4 
最简便方法,利用windows系统的时间同步功能,精度要求不高可以利用本地时间,要求高一些严谨一些,可以获取sql服务器时间,sql服务器时间可以同步授时网站时间。实际上,获取网络时间的目的一般是记录系统操作的时序时间。
2022-09-23 15:27
sych
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:322
专家分:450
注 册:2019-10-11
收藏
得分:0 
结果不重要,只看过程
2022-09-23 17:44
sych
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:322
专家分:450
注 册:2019-10-11
收藏
得分:0 
能用VFP实现,有成就感
2022-09-23 17:44
sych
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:322
专家分:450
注 册:2019-10-11
收藏
得分:0 
https://blog.
看着简单,想改编成vfp却处处掣肘
2022-09-24 20:32
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
以下是引用sych在2022-9-24 20:32:28的发言:

https://blog.
看着简单,想改编成vfp却处处掣肘

200.205.253.254:123 这个NTP能用吗?
2022-09-25 08:23
sych
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:322
专家分:450
注 册:2019-10-11
收藏
得分:0 
这个也不行,就差一个生成报文的代码,发送不是问题,接收也不是问题
2022-09-25 10:00
sych
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:322
专家分:450
注 册:2019-10-11
收藏
得分:0 
原来的NTP服务器好像不 用发送报文,自动按UDP模式广播,而端口是123的是TCP连接,均需要先发送报文,才会返回报文
2022-09-25 10:02
sych
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:322
专家分:450
注 册:2019-10-11
收藏
得分:0 
我猜的,具体远离不懂的
2022-09-25 10:02
sych
Rank: 6Rank: 6
等 级:侠之大者
威 望:7
帖 子:322
专家分:450
注 册:2019-10-11
收藏
得分:0 
/* 构建 NTP 协议包 */
int ConstructPacket(char *Packet)
{
    char Version = 1;
    long SecondFrom1900;
    long Zero = 0;
    int Port;
    time_t timer;
   
    strcpy(Protocol,NTPV1);
    /* 判断协议版本 */
    if(strcmp(Protocol, NTPV1) || strcmp(Protocol,NTPV2) || strcmp(Protocol, NTPV3) || strcmp(Protocol, NTPV4))
    {
        Port = NTPPORT;
        Version = Protocol[6] - 0x30;
        Packet[0] = (Version << 3) | 3; //LI--Version--Mode
        Packet[1] = 0;                  //Startum
        Packet[2] = 0;                  //Poll interval
        Packet[3] = 0;                  //Precision

        /* 包括 Root delay、Root disperse 和 Ref Indentifier */
        memset(&Packet[4], 0, 12);
        /* 包括 Ref timestamp、Ori timastamp 和 Receive Timestamp */
        memset(&Packet[16], 0, 24);

        time(&timer);
        SecondFrom1900 = SecondBef1970 + (long)timer;
        SecondFrom1900 = htonl(SecondFrom1900);

        memcpy(&Packet[40], &SecondFrom1900, 4);
        memcpy(&Packet[44], &Zero, 4);
        return 48;
    }
    else    // time/udp
    {
        Port = TIMEPORT;
        memset(Packet, 0, 4);
        return 4;
    }
    return 0;
}
这个构建NTP协议包不知道怎么转到vfp中,看了你前一阵子写的构建struct类型的数据,还是理解不了
2022-09-25 11:39
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10609
专家分:43210
注 册:2014-5-20
收藏
得分:0 
以下是引用sych在2022-9-25 11:39:04的发言:
    ......
    strcpy(Protocol,NTPV1);
    /* 判断协议版本 */
    if(strcmp(Protocol, NTPV1) || strcmp(Protocol,NTPV2) || strcmp(Protocol, NTPV3) || strcmp(Protocol, NTPV4))
    {
        Port = NTPPORT;
        Version = Protocol[6] - 0x30;
        ......
        SecondFrom1900 = SecondBef1970 + (long)timer;
        ......
    }

代码好象不完整或有问题
1、strcpy(Protocol,NTPV1);
    #define NTPV1 "NTP/V1"
    相当于 Protocol = "NTP/V1"
2、if(strcmp(Protocol, NTPV1) || strcmp(Protocol,NTPV2) || strcmp(Protocol, NTPV3) || strcmp(Protocol, NTPV4))
    相当于 if (Protocol != NTPV1) or (Protocol != NTPV2) or (Protocol != NTPV3) or (Protocol != NTPV4)
    随便一个Protocol也可能满足条件
3、Version = Protocol[6] - 0x30;
    Protocol = "NTP/V1" 时,Protocol[6]应该是'\0'(字符串结束符),Protocol[0]是'N'
4、SecondFrom1900 = SecondBef1970 + (long)timer;
    SecondBef1970 从开始声明 double SecondBef1970; 之后就没有定义,在这时属未定义行为,带有不确定因素。
2022-09-25 16:18
快速回复:连接NTP服务器,获取网络时间,请赐教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.028630 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved