19

Python で ntp クライアントを作成して、タイム サーバーにクエリを実行し、時間を表示してプログラムを実行しましたが、結果が得られません。Python の 2.7.3 統合開発環境を使用しており、OS は Windows 7 です。コードは次のとおりです。

# File: Ntpclient.py
from socket import AF_INET, SOCK_DGRAM
import sys
import socket
import struct, time

# # Set the socket parameters 

host = "pool.ntp.org"
port = 123
buf = 1024
address = (host,port)
msg = 'time'


# reference time (in seconds since 1900-01-01 00:00:00)
TIME1970 = 2208988800L # 1970-01-01 00:00:00

# connect to server
client = socket.socket( AF_INET, SOCK_DGRAM)
client.sendto(msg, address)
msg, address = client.recvfrom( buf )

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

5 に答える 5

25

ntplibを使用します。

以下は、Python 2 と 3 の両方で機能するはずです。

import ntplib
from time import ctime
c = ntplib.NTPClient()
response = c.request('pool.ntp.org')
print(ctime(response.tx_time))

出力:

Fri Jul 28 01:30:53 2017
于 2012-09-30T20:13:47.577 に答える
4

そのはず

msg = '\x1b' + 47 * '\0' 

それ以外の

msg = 'time'

ただし、Maksym が言ったように、代わりに ntplib を使用する必要があります。

于 2012-09-30T20:03:59.790 に答える
0
msg = '\x1b' + 47 * '\0'
.......
t = struct.unpack( "!12I", msg )[10]
于 2014-06-01T14:49:22.120 に答える
0

私の答えがあなたの期待を満たさない場合は申し訳ありません。既存のソリューションを使用することは理にかなっていると思います。ntplibは、NTP サーバーを操作するための非常に優れたライブラリです。

于 2012-09-30T20:06:47.340 に答える