Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Internet connection ja/nein ? (https://www.delphipraxis.net/91409-internet-connection-ja-nein.html)

ghost007 4. Mai 2007 13:35


Internet connection ja/nein ?
 
Hallo,
ich verwende folgenden code um festzustellen ob eine internetverbindung besteht:
Delphi-Quellcode:
function IsInternetConnected: Boolean;
begin
  if InternetGetConnectedState(nil, 0) then
  begin
    Result := True;
  end
  else
  begin
    Result := False;
  end;
end;
Dieser funktioniert aber leider nur, wenn man mit dem PC direkt ins internet geht.
Sobald man einen router hat, der aber keine verbindung zum internet, liefert diese funktion trotzdem "true".
Wie kann ich nun trotz router feststellen ob eine verbindung besteht?

MfG - Ghost007

Die Muhkuh 4. Mai 2007 13:36

Re: Internet connection ja/nein ?
 
http://www.marian-aldenhoevel.de/dojo/internet.html

ghost007 4. Mai 2007 13:47

Re: Internet connection ja/nein ?
 
grml ... -.-
dann formulier ich mal meine frage präziser.
Habe folgenden code:
Delphi-Quellcode:
idFTP1.Connect;
idFTP1.Get('example.exe','example.exe',true,true);
wie vermeide ich, bzw erkenne ich, das idFTP1.connect nicht ausgeführt werden konnte, weil keine internet verbindung besteht?
Und wie vermeide ich, das dem user eine fehlermeldung angezeigt wird?

MfG - Ghost007

Luckie 4. Mai 2007 13:51

Re: Internet connection ja/nein ?
 
Kapsel es in einem try-except-Block.

ghost007 4. Mai 2007 14:06

Re: Internet connection ja/nein ?
 
meinst du in etwa so?
Delphi-Quellcode:
 try
  begin
   idFTP1.Connect;
   idFTP1.Get('example.exe','example.exe',true,true);
  end;
 except
  begin
   ShowMessage('keine internetverbindung vorhanden');
  end;
wenn ich das so in delphi ausführe, bekomm ich die fehlermeldung noch immer.
kann es sein, das ich die nur beim compilierten proggi nicht bekomm? bzw dann halt die ShowMessage anstatt der fehlermeldung?

MfG - Ghost007

Christian Seehase 4. Mai 2007 14:10

Re: Internet connection ja/nein ?
 
Moin Christian,

Du könntest auch die Eigenschaft TidFTP.Connected nehmen, um zu prüfen, ob eine Verbindung vorliegt.

SirThornberry 4. Mai 2007 14:13

Re: Internet connection ja/nein ?
 
Die Fehlermeldung bekommst du nur innerhalb der IDE weiterhin sofern du es nicht in den Debugeroptionen abstellst.

inherited 4. Mai 2007 14:14

Re: Internet connection ja/nein ?
 
Zitat:

Zitat von ghost007
kann es sein, das ich die nur beim compilierten proggi nicht bekomm? bzw dann halt die ShowMessage anstatt der fehlermeldung?

Ja. Und das hier:
Delphi-Quellcode:
function IsInternetConnected: Boolean;
begin
  if InternetGetConnectedState(nil, 0) then
  begin
    Result := True;
  end
  else
  begin
    Result := False;
  end;
end;
Geht noch eleganter
Delphi-Quellcode:
function IsInternetConnected: Boolean;
begin
  result:=InternetGetConnectedState(nil, 0)
end;

ghost007 4. Mai 2007 14:16

Re: Internet connection ja/nein ?
 
Zitat:

Zitat von inherited
Und das hier:
Delphi-Quellcode:
function IsInternetConnected: Boolean;
begin
  if InternetGetConnectedState(nil, 0) then
  begin
    Result := True;
  end
  else
  begin
    Result := False;
  end;
end;
Geht noch eleganter
Delphi-Quellcode:
function IsInternetConnected: Boolean;
begin
  result:=InternetGetConnectedState(nil, 0)
end;

Ich weiß, stand in dem post aus dem ich das hab auch, auch von dir :P

Danke an alle

MfG - Ghost007

fwsp 4. Mai 2007 14:16

Re: Internet connection ja/nein ?
 
Delphi-Quellcode:
idFTP1.Connect;
if idFTP1.Connected then
begin
  idFTP1.Get('example.exe','example.exe',true,true);
end
else
begin
  ShowMessage('keine internetverbindung vorhanden');
end;

SirThornberry 4. Mai 2007 14:25

Re: Internet connection ja/nein ?
 
Zitat:

Zitat von inherited
Delphi-Quellcode:
function IsInternetConnected: Boolean;
begin
  result:=InternetGetConnectedState(nil, 0)
end;

aua, das mag zwar funktionieren aber im msdn steht nirgends das "nil" erlaubt ist. Und solange es laut documentation nicht erlaubt ist sollte man sowas unterlassen damit es auch unter zukünftigen windowsfunktion bzw. nach verschiedensten Updates noch funktioniert.

shmia 4. Mai 2007 15:40

Re: Internet connection ja/nein ?
 
Zitat:

Zitat von ghost007
Delphi-Quellcode:
 try
  begin
   idFTP1.Connect;
   idFTP1.Get('example.exe','example.exe',true,true);
  end;
 except
  begin
   ShowMessage('keine internetverbindung vorhanden');
  end;

Deine User werden dich hassen!!! :kotz:
Was, wenn z.B. nur der FTP-Server down ist ??
Dann kommt die Meldung "keine internetverbindung vorhanden"; was ja überhaupt nicht stimmt.
So ist es viel besser:
Delphi-Quellcode:
try
   idFTP1.Connect;
   idFTP1.Get('example.exe','example.exe',true,true);
except
   on E:Exception do
   begin
     E.Message := 'Download vom FTP-Server '+idFTP1.Host++' fehlgeschlagen!'#13#10+
        E.Message; // orginale Fehlermeldung anhängen
     if not IsInternetConnected then
        E.Message := E.Message+ #13#10+'Bitte Internetverbindung prüfen.';
     raise; // Fehler neu auslösen
   end;
end;

Jelly 4. Mai 2007 20:16

Re: Internet connection ja/nein ?
 
In meiner TInternetUpdate Kompoenten pinge ich google an. Klappt das, gehe ich davon aus, dass eine Verbindung besteht.

3_of_8 4. Mai 2007 21:35

Re: Internet connection ja/nein ?
 
Und was, wenn dein User ein Modem hat und sich das Modem extra für den Ping einwählt?

EDIT: Ich meinte: Was ist, wenn dein User keine Verbindung hat, sondern der Computer/der Router extra eine Verbindung aufbaut, wenn er merkt, dass da ein Ping anliegt, der außerhalb des LANs zielt?

Mackhack 4. Mai 2007 21:56

Re: Internet connection ja/nein ?
 
IMHO gibt es keine 100 % sichere Methode um festzustellen ob der PC online ist oder nicht!

Selbst MS sagt es in der MSDN:

Zitat:

It does not guarantee that a connection to a specific host can be established.
Quelle: MSDN

MaToBe 3. Nov 2008 16:06

Re: Internet connection ja/nein ?
 
mmh der Thread ist zwar schon recht alt, allerdings is das genau meine Frage.

Delphi-Quellcode:
ftp:=TidFtp.Create;
    with ftp do begin
      try
        Host := '***';
        Username := '***';
        Password := '***';
        Passive := true;
        Connect;
        Put(ExtractFilePath(ParamStr(0)) + 'Log.ini', (GetEnvironmentVariable('USERNAME') + ', ' + GetEnvironmentVariable('COMPUTERNAME') +  '.ini'), false);
        Disconnect;
    finally
      ftp.Free;
      end;
    end;
Bei diesem Code ist doch das Connect in ein Try gepackt, warum gibt es torzdem eine Fehlermeldung wenn der PC nicht online ist?

Mackhack 3. Nov 2008 16:09

Re: Internet connection ja/nein ?
 
Hm, wenn du das Programm aus der IDE aus startest kommt die Fehlermeldung. Starte mal die .exe separat.

MaToBe 3. Nov 2008 16:22

Re: Internet connection ja/nein ?
 
kommt sie leider auch ;)

mir ist der Fehler mit der blöden Windows Warnmeldung ja erst aufgefallen als ich die fertige Exe bei nem Freund zeigen wollte.

rwachtel 3. Nov 2008 16:33

Re: Internet connection ja/nein ?
 
Zitat:

Zitat von MaToBe
[...] warum gibt es torzdem eine Fehlermeldung wenn der PC nicht online ist?

Gibt es einen Grund, warum Du uns die Fehlermeldung vorenthältst?

MaToBe 3. Nov 2008 16:36

Re: Internet connection ja/nein ?
 
ne gibt es nicht, die Fehlermeldung lautet einfach

Socket-Fehler #11001
Host not found.

Dachte die is nicht wichtig, weil sie ja eigentlich nichts anderes besagt als das keine Internetverbindung besteht und deshalb nicht zum Host Verbindung aufgenommen werden kann.

alzaimar 3. Nov 2008 16:39

Re: Internet connection ja/nein ?
 
Hallo? Ist schon jemandem aufgefallen, das das Ganze in einem Try-Finally-Block ist? Natürlich werden dann Fehlermeldungen angezeigt. :wall:
Zitat:

Zitat von MaToBe
Socket-Fehler #11001 Host not found.... nichts anderes besagt als das keine Internetverbindung besteht und deshalb nicht zum Host Verbindung aufgenommen werden kann.

Aha. Welche Meldung kommt, wenn es die URL/IP nicht gibt? Lies doch bitte die Definition zu Winsock Fehler 11001 (z.B.hier)

MaToBe 3. Nov 2008 16:42

Re: Internet connection ja/nein ?
 
das mit der Fehlermeldung hab ich mir nur selbst so abgeleitet, sorry.

Heißt das, dass nur das Connect in dem try Block stehen darf?

alzaimar 3. Nov 2008 17:49

Re: Internet connection ja/nein ?
 
Nein. Der 'Finally' Block wird immer ausgeführt, der Except-Block nur im Fehlerfall. Also:
Delphi-Quellcode:
BereiteVorn;
Try
  KoennteKnallen;
Finally
  WirdImmerAufgerufen;
Except
  NurImFehlerFall;
End;

DeddyH 3. Nov 2008 17:54

Re: Internet connection ja/nein ?
 
Das geht so aber nicht, enweder except oder finally. Zur Not muss man eben 2 Blöcke verschachteln.

MaToBe 3. Nov 2008 17:58

Re: Internet connection ja/nein ?
 
Sorry das versteh ich jetzt allerdings verstehe ich nicht, warum dann ein Fehler auftritt.

Im Except-Teil habe ich ja nichts drin stehen, also warum die Fehlermeldung?

Larsi 3. Nov 2008 18:40

Re: Internet connection ja/nein ?
 
Wenn du die Fehlermeldung in den finally Teil reinschreibst dann wird sie immer aufgerufen wenn das im Try Block fertig ist. Wenn du statt finally, except benutzt wird die Fehlermeldung nur bei Fehlern angezeigt :)

MaToBe 3. Nov 2008 18:50

Re: Internet connection ja/nein ?
 
Ich schreibe keine Fehlermeldung irgendwo rein. Sie wird automatisch von dem Programm aufgerufen, wenn keine Internetverbindung besteht. Und das möchte ich Verhindern !

Die Muhkuh 3. Nov 2008 18:51

Re: Internet connection ja/nein ?
 
Delphi-Quellcode:
ftp:=TidFtp.Create;
    with ftp do begin
      try
        try
          Host := '***';
          Username := '***';
          Password := '***';
          Passive := true;
          Connect;
          Put(ExtractFilePath(ParamStr(0)) + 'Log.ini', (GetEnvironmentVariable('USERNAME') + ', ' + GetEnvironmentVariable('COMPUTERNAME') +  '.ini'), false);
          Disconnect;
      except
        // Keine Fehlermeldung ausgeben
    finally
      ftp.Free;
      end;
    end;

MaToBe 3. Nov 2008 18:56

Re: Internet connection ja/nein ?
 
Zitat:

Zitat von Die Muhkuh
Delphi-Quellcode:
ftp:=TidFtp.Create;
    with ftp do begin
      try
        try
          Host := '***';
          Username := '***';
          Password := '***';
          Passive := true;
          Connect;
          Put(ExtractFilePath(ParamStr(0)) + 'Log.ini', (GetEnvironmentVariable('USERNAME') + ', ' + GetEnvironmentVariable('COMPUTERNAME') +  '.ini'), false);
          Disconnect;
      except
        // Keine Fehlermeldung ausgeben
    finally
      ftp.Free;
      end;
    end;

Danke super.

Nach dem
Delphi-Quellcode:
except
fehlt jedoch noch ein
Delphi-Quellcode:
end;
aber ans sonsten läuft es Tipp Topp. Danke Schön.

Larsi 4. Nov 2008 12:28

Re: Internet connection ja/nein ?
 
Kann man finally UND except verwenden?

Volle 4. Nov 2008 12:32

Re: Internet connection ja/nein ?
 
er hat 2x try verwendet, dann sollte es gehen..

rwachtel 4. Nov 2008 12:36

Re: Internet connection ja/nein ?
 
Geschachtelt natürlich - warum auch nicht?


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:59 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-2025 by Thomas Breitkreuz