T
Theblackismelan
Unregistered / Unconfirmed
GUEST, unregistred user!
想做个软件,可以直观的看到网内哪台电脑连接正常,哪台是断开。
希望大家多指教。
本人找了种方法
主要组件定义
组件名称 类型 主要属性 使用事件及方法
NetCheckForm TForm Menu=NetChech_Menu OnActivate=FormActivate
OnCloseQuery=FormCloseQuery
NetLibTable TTable TableName=IpLib.DB
NetLibDataSource TDataSource DataSet =NetLibTable
icmpping TidIcmpClient 方法 OnReply=icmppingReply
NetCheck_Timer TTimer OnTimer=Net_Check
2、监测过程。设置定时器定时自动在IP地址表中读入每个网点机的IP地址,更改TidIcmpClient控件的Host属性值,并调用其Ping()方法,发送请求报文和接收应答报文。其主要的代码段如下:
procedure TNetCheckForm.Net_Check(Sender:TObject);
begin
NetLibDataSource.DataSet.First;
NetlibDataSource.DataSet.Edit;
while not NetLibDataSource.DataSet.EOFdo
begin
TIpAddress:=NetLibDataSource.DataSet.FieldByName('节点IP').AsString;
//从IP库中取网点IP地址
NameString:=NetLibDataSource.DataSet.FieldByName('节点名称').AsString;
//从IP库中取网点名称
icmpping.Host:= TIpAddress;
try
icmpping.Ping;
Application.ProcessMessages ;
//延时
finally
end;
end;
NetCheckStatusBar.Panels[1].Text:=DateTimeToStr(Now);
end;
3、获取接收应答报文。调用TidIcmpClient控件Ping()方法后OnICMPReply事件触发,读取AreplyStatus对象判断联通性。其主要的代码段如下:
procedure TNetCheckForm.icmppingReply(ASender: TComponent;
const AReplyStatus: TReplyStatus);
begin
NetlibDataSource.DataSet.Edit;
TIpAddress:=NetLibDataSource.DataSet.FieldByName('节点IP').AsString;
//从IP库中取节点IP地址
NameString:=NetLibDataSource.DataSet.FieldByName('节点名称').AsString;
//从IP库中取节点名称
if AReplyStatus.BytesReceived <> 0 then
//判断回波并给出网络结果
begin
NetLibDataSource.DataSet.FieldByName('状态').AsString:='正常';
CreateNSLog(DateTimeToStr(Now)+' '+ NameString+':['+TIpAddress+'] 连接正常');
end
else
begin
NetLibDataSource.DataSet.FieldByName('状态').AsString:='中断';
CreateNSLog(DateTimeToStr(Now)+' '+ NameString+':['+TIpAddress+'] 连接中断');
end;
NetLibDataSource.DataSet.Next;
NetlibDataSource.DataSet.Edit;
end;
4、日志文件的生成。日志文件为文本文件每月一个。其主要的代码段如下:
procedure CreateNSLog(S:String);
var
NSLog:String;
TFile:TextFile;
begin
NSLog:='NS'+ YearMonthString + '.LOG';
if FileExists(NSLog) then
begin
AssignFile(TFile,NSLog);
Append(TFile);
end
else
begin
AssignFile(TFile,NSLog);
Rewrite(TFile);
end;
Writeln(TFile,S);
CloseFile(TFile);
end;
可能太乱,麻烦了,我就是找不到上面所说的那些组件。谁能告诉我这些组件哪找,或者更好的办法,谢谢大家了
希望大家多指教。
本人找了种方法
主要组件定义
组件名称 类型 主要属性 使用事件及方法
NetCheckForm TForm Menu=NetChech_Menu OnActivate=FormActivate
OnCloseQuery=FormCloseQuery
NetLibTable TTable TableName=IpLib.DB
NetLibDataSource TDataSource DataSet =NetLibTable
icmpping TidIcmpClient 方法 OnReply=icmppingReply
NetCheck_Timer TTimer OnTimer=Net_Check
2、监测过程。设置定时器定时自动在IP地址表中读入每个网点机的IP地址,更改TidIcmpClient控件的Host属性值,并调用其Ping()方法,发送请求报文和接收应答报文。其主要的代码段如下:
procedure TNetCheckForm.Net_Check(Sender:TObject);
begin
NetLibDataSource.DataSet.First;
NetlibDataSource.DataSet.Edit;
while not NetLibDataSource.DataSet.EOFdo
begin
TIpAddress:=NetLibDataSource.DataSet.FieldByName('节点IP').AsString;
//从IP库中取网点IP地址
NameString:=NetLibDataSource.DataSet.FieldByName('节点名称').AsString;
//从IP库中取网点名称
icmpping.Host:= TIpAddress;
try
icmpping.Ping;
Application.ProcessMessages ;
//延时
finally
end;
end;
NetCheckStatusBar.Panels[1].Text:=DateTimeToStr(Now);
end;
3、获取接收应答报文。调用TidIcmpClient控件Ping()方法后OnICMPReply事件触发,读取AreplyStatus对象判断联通性。其主要的代码段如下:
procedure TNetCheckForm.icmppingReply(ASender: TComponent;
const AReplyStatus: TReplyStatus);
begin
NetlibDataSource.DataSet.Edit;
TIpAddress:=NetLibDataSource.DataSet.FieldByName('节点IP').AsString;
//从IP库中取节点IP地址
NameString:=NetLibDataSource.DataSet.FieldByName('节点名称').AsString;
//从IP库中取节点名称
if AReplyStatus.BytesReceived <> 0 then
//判断回波并给出网络结果
begin
NetLibDataSource.DataSet.FieldByName('状态').AsString:='正常';
CreateNSLog(DateTimeToStr(Now)+' '+ NameString+':['+TIpAddress+'] 连接正常');
end
else
begin
NetLibDataSource.DataSet.FieldByName('状态').AsString:='中断';
CreateNSLog(DateTimeToStr(Now)+' '+ NameString+':['+TIpAddress+'] 连接中断');
end;
NetLibDataSource.DataSet.Next;
NetlibDataSource.DataSet.Edit;
end;
4、日志文件的生成。日志文件为文本文件每月一个。其主要的代码段如下:
procedure CreateNSLog(S:String);
var
NSLog:String;
TFile:TextFile;
begin
NSLog:='NS'+ YearMonthString + '.LOG';
if FileExists(NSLog) then
begin
AssignFile(TFile,NSLog);
Append(TFile);
end
else
begin
AssignFile(TFile,NSLog);
Rewrite(TFile);
end;
Writeln(TFile,S);
CloseFile(TFile);
end;
可能太乱,麻烦了,我就是找不到上面所说的那些组件。谁能告诉我这些组件哪找,或者更好的办法,谢谢大家了