2017-08-21 4 views
0

ローカルntpタイムサーバから時刻を取得するには、autoitを使用する必要があります。NTPタイムサーバへのUDPリクエストの自動化

; Function gets time from timeserver to not relay on pc time 
Func get_Time_From_Time_Server() 
    Local $iSocket = UDPOpen(TCPNameToIP($s_Time_Server), 123) ; Port 123 
    Local $data = "" 

    While $data = "" 
     $data = UDPRecv($iSocket, 100) 
     Sleep(100) 
    Wend   
EndFunc 

UDP接続を開く動作するようだが、""に等しい$dataとどまります。

答えて

0

あなたのコードでソケットをリクエストするのはどこですか?要求パケットhere

#include <Date.au3> 

$recv = NTP_Connect("10.24.1.20") 
ConsoleWrite($recv & @CRLF) 
Parse_Time($recv) 

Func NTP_Connect($NTP_Server) 
    UDPStartup() 
    Dim $socket = UDPOpen(TCPNameToIP($NTP_Server), 123) 
    $status = UDPSend($socket, MakePacket("1b0e01000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000")) 
    $data = "" 
    While $data = "" 
     $data = UDPRecv($socket, 100) 
     Sleep(100) 
    WEnd 
    UDPCloseSocket($socket) 
    UDPShutdown() 
    Return $data 
EndFunc ;==>NTP_Connect 

Func MakePacket($d) 
    Local $p = "" 
    While $d 
     $p &= Chr(Dec(StringLeft($d, 2))) 
     $d = StringTrimLeft($d, 2) 
    WEnd 
    Return $p 
EndFunc ;==>MakePacket 

Func Parse_Time($bdata) 
    $unsignedHexValue = StringMid($bdata, 83, 8) 
    $value = UnsignedHexToDec($unsignedHexValue) 
    $TZinfo = _Date_Time_GetTimeZoneInformation() 
    $UTC = _DateAdd("s", $value, "1900/01/01 00:00:00") 
    ConsoleWrite($UTC & @CRLF) 
    If $TZinfo[0] <> 2 Then ; 0 = Daylight Savings not used in current time zone/1 = Standard Time 
     $TZoffset = ($TZinfo[1]) * - 1 
    Else ; 2 = Daylight Savings Time 
     $TZoffset = ($TZinfo[1] + $TZinfo[7]) * - 1 
    EndIf 
    $UTC = _DateAdd("n", $TZoffset, $UTC) 
    $m = StringMid($UTC, 6, 2) 
    $d = StringMid($UTC, 9, 2) 
    $y = StringMid($UTC, 1, 4) 
    $h = StringMid($UTC, 12, 2) 
    $mi = StringMid($UTC, 15, 2) 
    $s = StringMid($UTC, 18, 2) 
EndFunc 

Func UnsignedHexToDec($n) 
    $ones = StringRight($n, 1) 
    $n = StringTrimRight($n, 1) 
    Return Dec($n) * 16 + Dec($ones) 
EndFunc ;==>UnsignedHexToDec 

説明:

ここローカルNTP(Source)からデータを受信する例です。

関連する問題