[delphi] Jak wykryć połączenie z netem?

0

Jak w temacie czyli jak wykryć połączenie z netem?
Znalazłem w FAQu:
http://4programmers.net/Delphi/FAQ/Sieć/Internet/Jak_wykryć_połączenie_z_netem
ale to nie działa u mnie. Zna ktoś inny sposób?

0

A dodales do sekcji Uses modul WinInet?

0

Oczywiście :) Ale nie działa. Bez względu na to czy jest połączony czy nie zwraca wartość true

0

http://www.torry.ru/pages.php?id=222

Tu maszkomponenty do wykrywania neta.

0

bzdura
DZIAŁA :-D :-)

0

Spróbuj tego:

function IsNet:Boolean;
const
  FLAG_ICC_FORCE_CONNECTION     =  $0001;
// Missing constant for InternetGetConnectedState flags
const
  INTERNET_PING_SITES: Array [0..2] of PChar =
                                ('http://www.google.com',
                                 'http://www.wp.com',
                                 'http://www.onet.com');
var
  dwFlags:    DWORD;
begin
  for dwFlags:=Low(INTERNET_PING_SITES) to High(INTERNET_PING_SITES) do
  begin
    Result:= InternetCheckConnection(INTERNET_PING_SITES[dwFlags], FLAG_ICC_FORCE_CONNECTION, 0);
    if Result then
      Break;
  end;
end;
0

Nie wiem czy sposób, ktory podal mgyver wykryje sieć jeżeli mamy połączenie z routerem, a ów router już z
siecią połączenie nie ma. Polecam sprawdzić poprzez pingowanie po IP jakiegoś popularnego adresu, który to
się nie zmienia. Przykładem jest www.wp.pl. Dlaczego po IP? A no dlatego, że wtedy odpowiedź dostaniemy,
o wiele szybciej przy braku połącznie niż pingując adres po nazwie. Tylko najpierw należy pobrać sobie źródła
komponentu DPing z adresu: Dwa w jednym czyli jak napisać komponent i wysłać pinga i użyć kodu:

unit pingowanie;

interface

uses
  Classes, Forms, DPing;

type
  TPinger = class(TObject)
  private
    CzyJestInterNet : boolean;
    procedure PingerOdpowiedzi(Sender : TObject; ReplyStatus : TReplyStatus; ReplyTime : Integer);
  public
    constructor Create(var Rezultat : boolean);
  end;

const
  AdresDoPingowania = 'www.wp.pl';

function CzyJestPolaczenieInternetowe : boolean;

implementation

procedure TPinger.PingerOdpowiedzi(Sender : TObject; ReplyStatus : TReplyStatus;
  ReplyTime : Integer);
begin
  CzyJestInterNet := ReplyStatus = rsLives;
end;

constructor TPinger.Create(var Rezultat : boolean);
const
  IleRazyMapingowac = 3;
  Ping_Limit_Czasu_MS = 500;
  Pinguj_Adres_IP = '212.77.100.101';
var
  I : Byte;
  Pinger : TDPing;
begin
  Rezultat := False;
  CzyJestInterNet := False;
  Pinger := TDPing.Create(Application);
  Pinger.TimeOut := Ping_Limit_Czasu_MS;
  Pinger.OnReply := PingerOdpowiedzi;
  Pinger.Host := Pinguj_Adres_IP;
  for I := 1 to IleRazyMapingowac do
  begin
    try
      Pinger.Ping;
    except
      CzyJestInterNet := False;
    end;
    if CzyJestInterNet = True then
    begin
      Break;
    end;
  end;
  Rezultat := CzyJestInterNet;
end;

function CzyJestPolaczenieInternetowe : boolean;
var
  Pinger : TPinger;
  JestInterNet : boolean;
begin
  JestInterNet := False;
  Pinger := TPinger.Create(JestInterNet);
  Result := JestInterNet;
  Pinger.Free;
end;

end.
0

Tak się akurat mi przypadkiem zdażyło że w czasie testów soft który pisze sie wywalał. Dopiero po czasie zajażyłem że neta nie mam chociaż jestem z ruterem połączony (vectra nawaliła, LAN działał bez zarzutu). Wiec na czas testów wypie****m odwołanie sie do funkcji IsNet.
Działa dobrze. A w czasie testów to nawet za dobrze :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1