想利用IdUDPServer来编写一个关于ntp服务器端的程序
以下是我编写的一点内容,请教高手指点哪些错误?
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
ng:TNTPGram;
t1,t2,t3:tdatetime;
s,s1:string;
begin
t1:=now;
FillChar(ng, SizeOf(ng), 0);
adata.ReadBuffer(ng,adata.Size);
ng.Head1:=$1c; //ntp服务器
ng.Head2:=$00; //ntp层无定义
setlength(s1,sizeof(ng));
move(ng,s1[1],sizeof(ng));
if s1<>'' then
begin
ng.Org1:=ng.Xmit1; //将客户端的初始时间内容放到ng.org中
ng.Org2:=ng.Xmit2; t3:=NTPToDateTime(flip(ng.org1),flip(ng.org2)); DateTimeToNTP(t1,ng.rcv1,ng.rcv2);//接收时间转换成1900-01-01 00:00:00到当时累积秒数
ng.rcv1 := Flip(ng.rcv1);
ng.rcv2 := Flip(ng.rcv2); t2:=now;
datetimetontp(t2,ng.xmit1,ng.xmit2);
ng.xmit1 := Flip(ng.xmit1);
ng.xmit2 := Flip(ng.xmit2); SetLength(s, SizeOf(ng));
Move(ng, s[1], SizeOf(ng));
with ABinding do
begin
SendTo(PeerIP, PeerPort, s[1], Length(s));
end;
end
else
begin
listbox1.Items.Add('错误') ;
exit;
end;
end;
其中NTPToDateTime是将从1900-01-01 00:00:00累积的秒数转换为本机时间, datetimetontp是将本机时间转换为从1900-01-01 00:00:00到现在的累积秒数;flip()是网络字节和本地字节的转换,这些没问题.
以下是我编写的一点内容,请教高手指点哪些错误?
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var
ng:TNTPGram;
t1,t2,t3:tdatetime;
s,s1:string;
begin
t1:=now;
FillChar(ng, SizeOf(ng), 0);
adata.ReadBuffer(ng,adata.Size);
ng.Head1:=$1c; //ntp服务器
ng.Head2:=$00; //ntp层无定义
setlength(s1,sizeof(ng));
move(ng,s1[1],sizeof(ng));
if s1<>'' then
begin
ng.Org1:=ng.Xmit1; //将客户端的初始时间内容放到ng.org中
ng.Org2:=ng.Xmit2; t3:=NTPToDateTime(flip(ng.org1),flip(ng.org2)); DateTimeToNTP(t1,ng.rcv1,ng.rcv2);//接收时间转换成1900-01-01 00:00:00到当时累积秒数
ng.rcv1 := Flip(ng.rcv1);
ng.rcv2 := Flip(ng.rcv2); t2:=now;
datetimetontp(t2,ng.xmit1,ng.xmit2);
ng.xmit1 := Flip(ng.xmit1);
ng.xmit2 := Flip(ng.xmit2); SetLength(s, SizeOf(ng));
Move(ng, s[1], SizeOf(ng));
with ABinding do
begin
SendTo(PeerIP, PeerPort, s[1], Length(s));
end;
end
else
begin
listbox1.Items.Add('错误') ;
exit;
end;
end;
其中NTPToDateTime是将从1900-01-01 00:00:00累积的秒数转换为本机时间, datetimetontp是将本机时间转换为从1900-01-01 00:00:00到现在的累积秒数;flip()是网络字节和本地字节的转换,这些没问题.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货