AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

ICMP Problem

Ein Thema von LoW_FloW · begonnen am 8. Mai 2004 · letzter Beitrag vom 8. Mai 2004
 
Benutzerbild von LoW_FloW
LoW_FloW

Registriert seit: 29. Nov 2003
117 Beiträge
 
Delphi 7 Professional
 
#1

ICMP Problem

  Alt 8. Mai 2004, 09:16
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.0then 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
  Mit Zitat antworten Zitat
 

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz