请教使用Socket获取NTP时间的问题 |
尚未結案
|
allen-86
一般會員 發表:28 回覆:44 積分:19 註冊:2008-02-01 發送簡訊給我 |
我参考的是这篇文章:http://www.fetia.cn/2010/07/4728.html
写成Delphi的,Sendto 错误。 请各位大大指点。 unit Unit2; interface uses Windows,Winsock2,SysUtils; type NTPPACKET=record li,vn,mode,stratum,poll,precision:uint8; root_delay,root_dispersion:ulong32; ref_id:array[0..3] of uint8; reftimestamphigh,reftimestamplow,oritimestamphigh, oritimestamplow,recvtimestamphigh,recvtimestamplow, trantimestamphigh,trantimestamplow:ulong32; end; function getntptime:_SYSTEMTIME; implementation function getntptime:_SYSTEMTIME; var WSAData:TWSAData; skt:TSocket; addr:TSockAddrIn; recbuf:array[0..255] of Char; n:integer; ntppack:NTPPACKET; firsttime:Cardinal; tt:TDateTime; begin WSAStartup($0101,WSAData); skt:=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP); if skt<0then begin Exit; end; ZeroMemory(@ntppack,SizeOf(ntppack)); ntppack.li :=0; ntppack.vn :=3; ntppack.mode :=3; ntppack.stratum :=2; firsttime:=DateTimeToFileDate(now); ntppack.oritimestamphigh:=htonl(firsttime); ZeroMemory(@addr,SizeOf(PSockAddr)); addr.sin_family :=AF_INET; addr.sin_port:=htons(13); addr.sin_addr.S_addr:=inet_addr('stdtime.gov.hk'); addr.sin_zero :=#0; if sendto(skt,ntppack,SizeOf(ntppack),0,@addr,SizeOf(addr))>0 then //这样写对吗? begin FillChar(recbuf,sizeof(recbuf),#0); recv(skt,recbuf,sizeof(recbuf),n); end; WSACleanup; closesocket(skt); end; end. 'stdtime.gov.hk' 这个服务器用Indy 的IdDayTime控件试过,用的是13的端口,可以正确取到时间值。 但是查资料好像都说NTP使用的是:123专用端口。
------
The empty vessels make the greatest sound. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |