Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Netzwerk getrennt (https://www.delphipraxis.net/61874-netzwerk-getrennt.html)

trifid 27. Jan 2006 14:10


Netzwerk getrennt
 
Gibt es ein Ereignis/Message/API das man abfangen kann, wenn die Netzwerkverbindung getrennt wird?
(z.B. Netzwerkkabel aus der Dose ziehen)

trifid 3. Feb 2006 15:43

Re: Netzwerk getrennt
 
gibt es dafür einen Lösungsansatz?

retnyg 3. Feb 2006 17:04

Re: Netzwerk getrennt
 
MSDN-Library durchsuchenRestoreMediaSense //interessant, im PSDK aber nicht auf der msdn site :gruebel:
Bei Google suchenRestoreMediaSense

Neotracer64 3. Feb 2006 17:33

Re: Netzwerk getrennt
 
http://windowssdk.msdn.microsoft.com...mediasense.asp

trifid 3. Feb 2006 22:20

Re: Netzwerk getrennt
 
Danke - da wäre ich nie drauf gekommen.

Aber leider ist diese API erst ab WinXP und .net zu haben.
Brauch diese aber für Win32 (WinNT,Win2k,WinXP).
Sicherlich könnte man alle Minute einen Ping absetzen, aber
a) Resourcenschonender ist ein Event oder eine Message
b) je schneller ich reagieren kann um so besser ist es für die Anwendung um Abläufe sperren zu können
c) einen Treiber wollte ich nicht programmieren
Anders kommt man da nicht ran?

ken_jones 3. Feb 2006 22:27

Re: Netzwerk getrennt
 
Hmm, bin mir nicht sicher, aber ändert sich nicht deine IP Adresse beim ausziehen des LAN Steckers?

ken_jones 3. Feb 2006 23:10

Re: Netzwerk getrennt
 
So etwas könnte gehen:

Delphi-Quellcode:
function GetLocalIPs(bGetAll: Boolean = True): string;
type
  PPInAddr = ^PInAddr;
var
  wsadata : TWSAData;
  hostinfo : PHostEnt;
  addr    : PPInAddr;
begin
  Result  := '';

  if(WSAStartUp($0101,wsadata) = 0) then // $0101 = Version 1.1 (Achtung: Ver 2.0 wäre $0002)
  try
    hostinfo := gethostbyname(nil);
    if(hostinfo <> nil) then begin
      addr  := pointer(hostinfo^.h_addr_list);

      while(addr^ <> nil) do begin
        Result := Result + inet_ntoa(addr^^);
        If not bGetAll then Break;
        inc(addr);
        If addr^ <> nil then Result := Result + ^M^J;
      end;
    end;
  finally
    WSACleanUp;
  end;
end;
Der Parameter bGetAll gibt an, ob er nur die erste HauptIP (False) oder alle vorhandenen IPs (True) auslesen soll.
Ist kein Netzwerk (auch kein IP Stack,etc) vorhanden, so gibts einen leeren String zurück.
Gibts einen String zurück, so kann folgendes geprüft werden:


If Result = '127.0.0.1' then ... // LAN Kabel ausgesteck oder Netzwerkverbindung getrennt
else ... // Mit LAN verbunden

trifid 6. Feb 2006 09:33

Re: Netzwerk getrennt
 
Danke.
Das Beispiel ist eine andere Art einen Ping abzusetzen ...
d.h. für mich, dass ich kein Ereignis bekomme

Tonic1024 6. Feb 2006 10:03

Re: Netzwerk getrennt
 
Weiss nicht warum es dir nicht gefällt, die funktion von ken_jones funzt bei mir (braucht WinSock) mit ca 4 Sekunden Verzögerung. Okay, ein Event wird nicht ausgelöst, aber das muss man abwägen ob das eine essentielle Fähigkeit ist oder obs ein Timer auch tut...


Toni

trifid 6. Feb 2006 10:23

Re: Netzwerk getrennt
 
Klar, der Timer wirft auch ein Ereignis ab.
Wahrscheinlich werde ich es irgendwie so machen, da ich unter WinNT keine andere Wahl habe.

Mal von einer anderen Seite betrachtet.
Bekommt der Server irgendeine Information, dass der Anwender sich abgestöpselt hat?


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:40 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