我需要帮助来完成以下脚本:
import socket
import struct
import sys
import time
NTP_SERVER = '0.uk.pool.ntp.org'
TIME1970 = 2208988800L
def sntp_client():
client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
data = str.encode('\xlb' + 47 * '\0')
client.sendto(data, (NTP_SERVER, 123))
data, addr = client.recvfrom(1024)
if data:
print('Response received from:', addr)
t = struct.unpack('!12I', data)[10]
t -= TIME1970
print('\tTime: %s' % time.ctime(t))
if __name__ == '__main__':
sntp_client()
预期产量:
^{pr2}$问题是程序没有给出任何输出。它看起来像是在:
data, addr = client.recvfrom(1024)
我希望有人能帮我。在
以下是第二版的工作脚本
应该注意到accepted answer忽略了时间戳的小数部分,参见例如IETF RFC5905,第13页。包含它的代码片段可能看起来像
还要记住,这只返回发送时间戳(tx;服务器发送数据包的时间)。如果您查看毫秒数,那么往返延迟可能非常大(参见链接的RFC5905第29页)。在
旁注:socket docs建议在
with
上下文中打开套接字,以便在不再需要时正确关闭它。在编写的脚本没有任何问题,您需要查找服务器可能没有响应的另一个原因,例如防火墙设置。 我自己的python SNTP脚本几乎完全相同:
用法:
^{pr2}$相关问题 更多 >
编程相关推荐