我总觉得用ping好一些,因为用Socket的话目标端口未必会开。
关于ping:
function IcmpCreateFile:Integer;stdcall;external 'ICMP.DLL';
function IcmpCloseHandle(ICMPHandle:Integer):boolean;stdcall;external 'ICMP.DLL';
function IcmpSendEcho( IcmpHandle:integer; DestinationAddress:Integer;RequestData:PChar; RequestSize: WORD;RequestOptions:Pointer;ReplyBuffer:PChar;ReplySize:DWORD;Timeout:DWORD):DWORD;stdcall external 'ICMP.DLL';function Ping(var sDestAddr:String):boolean;{ you can use the link to be a param of sDestAddr}
var
echoHandle:Integer;
echoReplyBuffer:array [0..255] of Char;
destAddr:Integer;
echoRequestData:String;
begin
Result:=false;
echoRequestData:='AAAAAAAAAA';
echoHandle:=IcmpCreateFile;
          destAddr:=inet_addr(PChar(SDestAddr));
          if IcmpSendEcho(echoHandle,destAddr,PChar(echoRequestData),Length(echoRequestData),nil,echoReplyBuffer,255,200)=0 then
            Result:=true else Result:=false;
IcmpCloseHandle(echoHandle);
end;

解决方案 »

  1.   

    用 http 控件,取网址内容,取下来即可,取不下来就算
      

  2.   

    谢谢大家的回答!  但是我想讲清楚一点,我要求的是检测整个链接是否是有效的,同时它是否可以连通并存在(如:http://www.csdn.net/index.htm),如果用Ping的话,只是检测该域名网站是否存在并可连通,而并不能够说明index.htm页是否存在。如果用http控件,就必须要取得网址内容,这样就比较慢,还不如不用程序检测,直接用IE浏览算了。不知各位谁有更好的办法??
      

  3.   

      而且 如果关了 ICMP 的话, ping 肯定 ping 不到
      

  4.   

    我记得用powersock好象可以实现。上次我试了一下探测任何网址,成功。
      

  5.   

    谢谢大家的回答!  但是我想讲清楚一点,我要求的是检测整个链接是否是有效的,同时它是否可以连通并存在(如:http://www.csdn.net/index.htm),如果用Ping的话,只是检测该域名网站是否存在并可连通,而并不能够说明index.htm页是否存在。如果用http控件,就必须要取得网址内容,这样就比较慢,还不如不用程序检测,直接用IE浏览算了。不知各位谁有更好的办法?? 
      

  6.   

    那还能有什么更好的办法。你要检测的就是该网站的 HTTPServer是否正常,你又不愿意用 HTTP 控件,那能有什么办法
      

  7.   

    赫赫,用FileExists(),哈~~~~~~~~~~开个玩笑。
      

  8.   

    lbsoft(lbsoft): 进行 head 操作,只取 head 不读内容即可
      

  9.   

    to notemper2(没脾气): 该如何做,能不能详细一点?
      

  10.   

    仍旧用 http 控件,但使用方法 HEAD (而不是 GET, POST,成功即正常而又不会得到不想要的数据)