本文的代码来源于《Python Network Programming Cookbook》中的1_12示例代码,书中代码是2.7版本的,我修改后在3.8环境下测试ok。

#!/usr/bin/env python
# Python Network Programming Cookbook -- Chapter -1
# This program is optimized for Python 3.8 It may run on any
# other Python version with/without modifications.
# 编写一个sntp客户端
import socket
import struct
import time

NTP_SERVER = "0.uk.pool.ntp.org"
TIME1970 = 2208988800


def sntp_client():
    client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    data = ("\x1b" + 47 * "\0").encode()
    client.sendto(data, (NTP_SERVER, 123))
    data, address = client.recvfrom(1024)
    if data:
        print("Response received from:", address)

    t = struct.unpack('!12I', data)[10]
    t -= TIME1970
    print('\tTime=%s' % time.ctime(t))


if __name__ == '__main__':
    sntp_client()

从socket.SOCK_DGRAM 可以看到 ntp(网路时间协议)是UDP的协议
且NTP协议的端口号为123

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐