下面的代码在一个网段执行ping 函数问题,但在多网段,执行ping的时候,无论是否连通,返回的结果,返回的数据报里包含网管的IP地址,都是通的。:
function ping( url: string):boolean;
var
aIdICMPClient: TIdICMPClient;
begin
aIdICMPClient:= TIdICMPClient.Create(nil);
aIdIcmpclient.ReceiveTimeout:=500;
aIdICMPClient.Host:= url;
try
aIdICMPClient.Ping();
except
Result:= False;
end;
if (aidicmpclient.ReplyStatus.fromipaddress<>'0.0.0.0')
and (aidicmpclient.ReplyStatus.fromipaddress<>'') then
result:=true
else
result:=false;
aIdICMPClient.Free;
end;
在多次测试,后 (aidicmpclient.ReplyStatus.ReplyStatusType = rsEcho )发现在if条件增加个判断就可以了,这个判断增加了返回的状态。更加准确的判断,是否正确的连接主机上了。
测试环境:delphi 7.0+xp.+路由器,多个网段