AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Mein Netzwerk ping arbeitet irgend wie nicht richtig...
Thema durchsuchen
Ansicht
Themen-Optionen

Mein Netzwerk ping arbeitet irgend wie nicht richtig...

Ein Thema von Jackie1983 · begonnen am 18. Feb 2010
Antwort Antwort
Jackie1983

Registriert seit: 12. Mär 2007
486 Beiträge
 
#1

Mein Netzwerk ping arbeitet irgend wie nicht richtig...

  Alt 18. Feb 2010, 17:25
Servus,

habe mir eine einfache Ping funktion gebastelt die per Thread aufgerufen wird.
Thread
Delphi-Quellcode:
          for i:=0 to High(DeviceArray) do
          begin
            PingResult := PingDeviceByIP(DeviceArray[i].Name, 1500, 4);
            PingPakete := PingResult.recResPakete;

            //Offline
            Status := '0';
            //Online
            if PingPakete > 0 then
              Status := '2';
Ping Funktion
Delphi-Quellcode:
Function PingDeviceByIP(ADeviceIP : string; ATimeOut : integer = 3000;APingCount : integer = 4) : rPingResult;
var
  s : string;
  IdIcmp : TIdIcmpClient;
  rk : TReplayKnecht;
  i,count : integer;
begin
  IdIcmp := TIdIcmpClient.Create(nil);
  rk := TReplayKnecht.Create;
  try
    count := 0;
    for i := 1 to length(ADeviceIP) do
      if ADeviceIP[i] = '.then inc(count);

    if count <> 4 then
      ADeviceIP :=GetIPFromHost(ADeviceIP);

    rk.fHost := ADeviceIP;
    IdIcmp.Host := ADeviceIP;
    IdIcmp.ReceiveTimeout := ATimeOut;
    IdIcmp.OnReply := rk.IdIcmpReply;
    try
      rk.fPaketeEmpfangen := 0;
      rk.fResponseTimeLow := High(integer);
      rk.fResponseTimeHigh := 0;
      rk.fResponseAll := 0;

      for i:=0 to APingCount-1 do
      begin
        IdIcmp.Ping;
        sleep(100);
      end;
      result.recResPakete := rk.fPaketeEmpfangen;
      // rest vom result
    except
      result.recResponseAll := 0;
      result.recResPakete := 0;
      exit;
    end;
    case IdIcmp.ReplyStatus.ReplyStatusType of
      rsErrorUnreachable : result.recResPakete := 0;
      rsTimeOut : result.recResPakete := 0;
    end;
  finally
    FreeAndNil(IdIcmp);
    FreeAndNil(rk);
  end;
end;
Und einmal mein Replayknecht
Delphi-Quellcode:
procedure TReplayKnecht.IdIcmpReply(ASender: TComponent;
  const AReplyStatus: TReplyStatus);
var
  Response : integer;
begin
  if AReplyStatus.ReplyStatusType = rsTimeOut then exit;
  if AReplyStatus.FromIpAddress = 'then exit;

  if AReplyStatus.FromIpAddress = fHost then
    fPaketeEmpfangen := fPaketeEmpfangen + 1
end;
Wenn ich per cmd ein ping auf www.google.de mache, alles ok. Wenn ich das aber hier über die Funktion laufen lasse, bekomme ich hier und da mal das das Gerät offline ist, also keine Pakete zurück gesendet hat. Nur das kann nicht sein die geräte sind Online, was meint ihr? TimeOut zu kurz oder ein Fehler in der Funktion, weis nicht wo da was falsch sein kann.

schonmal thx

[Edit]
eventuell muss ich noch dazu sagen das das meistens bei externen geräten Probleme macht. Teste das zum Beispiel mit irgend welchen Webservern, z.B. Google.
  Mit Zitat antworten Zitat
Antwort Antwort


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 19:34 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz