Guten Morgen erst einmal
. Ich bin grade dabei ein Programm zu gestalten, dass bei nicht erreichen eines Hosts diesen Host in eine ListBox schreibt. Bei
IP-Adressen geht das soweit (z.B. 192.168.0.99). Verwendet man nun aber Namen (kA wie die heißen, DNS glaub ich), gibt es Probleme, denn er meldet immer:
Socket-Fehler
Host nicht gefunden
Ich will diese Nachricht unterdrücken und stattdessen, die
IP auf die ListBox der Unerreichbaren setzten.
Hier sind die Stellen, auf die es ankommen (denke ich
):
Delphi-Quellcode:
var
frmMain: TfrmMain;
ini: TIniFile;
PC : Array of String ;
Anzahl : integer = 0 ;
current_PC : integer ;
available_PC : Array of String ;
unavailable_PC : Array of String ;
implementation
{$R *.dfm}
procedure Newsort ;
var
i : integer ;
begin
frmMain.lstErreichbar.Items.Clear ;
frmMain.lstUnerreich.Items.Clear ;
frmMain.lstErreichbar.Items.Add(IntToStr(length(available_PC)));
frmMain.lstUnerreich.Items.Add(IntToStr(length(unavailable_PC)));
{
for i := 1 to high(available_PC) do
frmMain.lstErreichbar.Items.Add(available_PC[i]) ;
for i := 1 to high(unavailable_PC) do
frmMain.lstUnerreich.Items.Add(unavailable_PC[i]);
}
end;
procedure TfrmMain.ICMPReply(ASender: TComponent; const ReplyStatus: TReplyStatus);
var
TempString: string ;
begin
if ReplyStatus.BytesReceived = 0 then begin
SetLength(unavailable_PC, Length(unavailable_PC)+1) ;
unavailable_PC[High(unavailable_PC)] := PC[current_PC];
end
else begin
TempString := ReplyStatus.FromIpAddress ;
if TempString = '0.0.0.0' then begin
SetLength(unavailable_PC, Length(unavailable_PC)+1) ; //Variable verlängern
unavailable_PC[High(unavailable_PC)] := PC[current_PC]; //Neusten Wert auslesen
end
else begin
SetLength(available_PC, Length(available_PC)+1) ;
available_PC[High(available_PC)] := PC[current_PC];
end;
end;
Newsort ;
end;
procedure TfrmMain.btnPingClick(Sender: TObject);
var
i: integer;
begin
SetLength(available_PC , 0) ;
SetLength(unavailable_PC, 0) ;
ICMP.OnReply := ICMPReply ;
btnPing.Enabled := false ;
try
for i := 1 to Anzahl do begin
current_PC := i ;
ICMP.Host := PC[i] ;
ICMP.Ping ;
end;
finally
btnPing.Enabled := true ;
end;
end;
Will sich jemand nicht durch den Code wuseln, kann er auch nur sagen, wie man die Socket-Fehler Nachricht unterdrückt oder die Nachricht "abfängt" um den PC in die Inaktive Liste zu schreben