try 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;或者你可以创建一个Socket检验对应的Address是否连通。
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;或者你可以创建一个Socket检验对应的Address是否连通。
解决方案 »
- 十六进制字符串转byte问题
- 在 BeginPath 和 EndPath 语句中用 TextOut 无效,
- 怎么样才能获取计算机有那几个串口?
- 再问DbGrid按列标题排序问题
- dbchart问题
- 最白吃的问题!!!在线等!!急!!@ var Form1: TForm1;这个定义去掉有事吗???
- 怎样用delphi语句求出两日期相减的差?
- 如何在TreeView的节点Selected时....能得到该节点的根节点的.text
- 一个准女程序员遇到的最后的问题。
- 求TRegExpr正则表达式
- 如何检测目前打开了哪些窗口?
- 文件型数据库应用软件采用什么控件,在查询和显示数据记录的时候速度最快?能不能支持中文?
up!
难道注定第二次问还是要成死贴吗??
偶没用过NMHTTP....PS:现在贴子限制一个人只能回复三次,又没有提前功能,哎,,,
你讲的包括ping不通的网站吗?具体怎么做呢?
Windows,Classes,Sysutils;type
TCheckUrl = class(TThread)
private
{ Private declarations }
protected
procedure Execute; override;
public
constructor Create;
end;implementationuses
Unit2,Unit3;constructor TCheckUrl.Create;
begin
inherited Create(true);
end;procedure TCheckUrl.Execute;
var
CurTime:LongWord;
DelayTime:LongWord;
Tag_Value:integer;
Address_Chk:string;
begin
with CheckLinksForm.DBISAMTable do
begin
TableName:='UrlAddress.dat';
Exclusive:=False;
ReadOnly:=False;
Open;
First;
while not EOF do
begin
Url_True_False:=False;
Address_Chk:=MainForm.DenCrypt(Trim(FieldByName('Url').AsString),'');
if Address_Chk<>'' then
begin
try
CheckLinksForm.NMhttp1.head(Trim(Address_Chk));
//设置时间延迟为0.5秒
DelayTime:=5000;
CurTime:=GetTickCount;
while (GetTickCount<(CurTime+DelayTime)) do
if Url_True_False=True then break;
CheckLinksForm.NMhttp1.Cancel;
if Url_True_False=True then
begin
Address_Chk:=Address_Chk+' ......Ok!';
CheckLinksForm.Memo1.Lines.Add(Address_Chk);
Tag_Value:=2;
end
else
begin
Address_Chk:=Address_Chk+' ......Failure!';
CheckLinksForm.Memo1.Lines.Add(Address_Chk);
Tag_Value:=1;
end;
except
Url_True_False:=False;
Address_Chk:=Address_Chk+' ......Failure!';
CheckLinksForm.Memo1.Lines.Add(Address_Chk);
Tag_Value:=1;
end;
//fieldbyname('Tag').value:=Tag_Value;
//fieldbyname('M_Date').value:=DatetimeToStr(Now);
//Post;
end;
next;
if Terminated then Exit;
end;
end;
CheckLinksForm.button2.caption:='Finished';
end;end.
虽然这个办法也不是好办法,
但不知道还有没有更好的办法?
用head方法取,然后判断replynumber的返回值
一般是可以了,但碰到自动跳转的页面还不知怎么处理
比如网易的个人主页,如某页不存在,则自动跳到www.163.com
这种情况怎么处理