인터넷 연결이 가능한 PC라면 공개 타임 서버를 이용해서 PC 시간을 표준시간으로 동기화 시킬 수 있다. 또한 많은 공개 타임 서버가 있으니 테스트를 통해 빠른 응답의 서버를 선택적으로 사용한다면 무리 없이 적용 가능하다.

NTP(The Network Time Protocol), 타임서버, 표준시간 등에 대한 설명은 이 문서 마지막의 사이트를 참고하면 된다.

사용자 삽입 이미지


[소켓을 이용한 서버 연결]
' NTP(Version4)는 포트번호 123, UDP 프로토콜을 이용한다.
' NTP Server (http://time.ewha.net/#public_time_server 참고)
'   - ntp.ewha.net (이대부속 초등학교)
'   - time.windows.com (MS)

Winsock1.Protocol = sckUDPProtocol
Winsock1.RemoteHost = "ntp.ewha.net"
Winsock1.RemotePort = 123
Winsock1.Bind


[요청 전문 전송]
Dim NTPHeader(47) As Byte
NTPHeader(0) = &HB

Winsock1.SendData NTPHeader

' 요청 시간
T1 = GetUTC


[표준 시간 계산]
T4 = GetUTC

Winsock1.GetData sData
Winsock1.Close

' 표준시간은 RFC 2030에 명시된 공식에 의해 계산되었습니다.
For i = 0 To 7
  bytTimeStamp(i) = sData(32 + i)
Next
T2 = GetTimeStampToUTC(bytTimeStamp)

For i = 0 To 7
  bytTimeStamp(i) = sData(40 + i)
Next
T3 = GetTimeStampToUTC(bytTimeStamp)

d = (T4 - T1) - (T2 - T3)
t = ((T2 - T1) + (T3 - T4)) / 2

CurrTime = t + GetUTC

tmpDate = DateAdd("s", Int(CurrTime) - 2145830400, #1/1/1968#)
st.wMilliseconds = CInt((CurrTime - Fix(CurrTime)) * 1000)



[관련사이트]
NTF Home
  ; http://www.ntp.org
RFC 2030 (SNTP Version4)
  ; http://www.faqs.org/rfcs/rfc2030.html
RFC 1305 (NTP Version3)
  ; http://www.faqs.org/rfcs/rfc1305.html
이대부속 초등학교 타임서버
  ; http://time.ewha.net
  ; PC와 서버의 표준 시각 설정법 및 시간 관련 많은 설명
SNTP VB 참고 소스
  ; http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=57675&lngWId=1
  ; http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=57339&lngWId=1


[첨부파일]
VB 예제 프로그램의 실행 파일


VB 예제 프로그램의 프로젝트 소스 코드


RFC 2030 문서 (SNTP Version4)


RFC 1305 문서 (NTP Version3)




2007/01/03 18:32 2007/01/03 18:32

트랙백 주소 :: http://www.enjoydev.com/blog/trackback/42

댓글을 달아 주세요