Autor Beitrag
Pipecheck
Hält's aus hier
Beiträge: 7



BeitragVerfasst: Sa 22.06.02 23:06 
Kann mir bitte jemand auf EINFACHE weise erklären wie ich checke ob eine Internetverbindung besteht?
Es soll einfach nur ausgegeben werden ob im Netz, oder nicht...
ich hoffe, das ist ein nicht ganz so alter hut.
greets Pipecheck

_________________
auf grund mehrer beschwerden ist hier vor erst nix zu sehen
Klabautermann
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Veteran
Beiträge: 6366
Erhaltene Danke: 60

Windows 7, Ubuntu
Delphi 7 Prof.
BeitragVerfasst: So 23.06.02 01:49 
Hallo,

doch das ist ein alter Hut und die Antwort ist immer wieder enttäuschend.
Es geht nicht. Zumindest nicht, wenn man ausschließen will, das der Test nicht selber eine Verbindung aufbaut, wenn der Rechner so konfiguriert ist, dass er bei anforderung eine Verbindung aufbauht.
Ein weiteres Problem ist, das der Netzwerkzugriff unter der Windows 9x reihe anders realisiert ist als unter der NT Reihe.

Also wie gesagt. Die universelle Lösung git es meines wissens nicht und wenn doch dann wird sie sicherlich nicht einfach sein (allein wegen der unterscheidung der Windowse).
Aber ich lasse mich gerne verbessern ;).

Gruß
Klabautermann
Torsten
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: So 23.06.02 02:12 
Moinsen!

Also ich verwende dazu die Funktion InternetGetConnectedState aus der Unit WinInet.

Kleines Beispiel:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
uses ... WinInet, ... ;

...

if InternetGetConnectedState(nil, 0) then
   ShowMessage('Ja, logen doch')
else
   ShowMessage('Nööö, doch nicht');
...


Hat bis dato auch immer funktioniert.

Jedoch konnte ich nicht testen, ob dabei eine Verbindung aufgebaut wird. Habe es immer nur hinter einem Router testen können.
Doch ich lasse mich auch gerne belehren. ;)

Grüße

Torsten
Pipecheck Threadstarter
Hält's aus hier
Beiträge: 7



BeitragVerfasst: So 23.06.02 14:02 
hehe, Torsten ist mein Gott :D

_________________
auf grund mehrer beschwerden ist hier vor erst nix zu sehen
Stefan
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 27.06.02 17:59 
Servus,

also dieses InternetGetConnectedState hat bei mir den Haken, dass es nur wenn ich über eine DFÜ-Verbindung online gehe funktioniert. Gehe ich z.B. mit einer älteren T-online Software oder durch ICS Software wie KEN ins Netz wird immer online angezeigt, auch wenn ich offline bin.

Ich habs auch schon mit der Abfrage der Regestry versucht, die ja auch erkennt, ob man online bzw offline ist. Hat aber auch nix gebracht.

Vielleicht weiss ja hier einer was...
Torsten
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: Do 27.06.02 18:54 
Moinsen!

Wo fragst Du das denn in der Registry ab?
Wenn die Registry das kennt (so wie Du schreibst), dann sollte man es doch auch abfragen können.

Grüße

Torsten
Stefan
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 27.06.02 20:30 
Hier ist der Code. Hab ich mal irgendwo gelesen, und da das mit dem InternetGetConnectedState bei mir nicht eindeutig funzt einfach ausprobiert. Leider kenn ich mich mit der Regestry nicht so gut aus, dass ich sagen kann, ob sich an der Stelle wies im Code steht überhaupt der online/offline Eintrag befindet.

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
Function IsConnected : Boolean;
var reg: TRegistry;
      buff: dword;
begin
    reg := tregistry.Create ;
    Reg.RootKey := HKey_local_machine;
    if reg.OpenKey('\System\CurrentControlSet\Services\RemoteAccess',false) then begin
       reg.ReadBinaryData('Remote Connection',buff,sizeof(buff));
       result := buff = 1;
       reg.CloseKey ;
       reg.Free ;
    end;
end;


und so frag ichs ab:

ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm2.Button2Click(Sender: TObject);
begin

 If IsConnected = true then begin
    StaticText1.Font.Color := clgreen;
    StaticText1.Caption := ' online ';
  end
  else begin
    StaticText1.Font.Color := clred;
    StaticText1.Caption:=' offline ';
  end;
end;


Also, Torsten, was meinst du dazu?
Torsten
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: Do 27.06.02 20:47 
Moinsen!

Hmm, das ist meiner Meinung nach nicht das Richtige.
Zum einen schreckt ja schon der Name RemoteAccess ab. Es geht dabei wohl eher darum, ob remote access zugelassen (eingeschaltet) wird.

In meiner Registry gibt es noch nicht mal diesen Wert. Ich wäre also offline beim Schreiben dieses Textes ;)

Tja, dennoch werde ich mich mal weiter erkundigen.
Nur schade, dass meine Funktion nicht arbeitet. Jedenfalls nicht immer. Gut zu wissen.

Grüße

Torsten
Torsten
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: Do 27.06.02 20:59 
Moinsen!

Mir fällt da gerade noch ein anderer Weg ein.
Ist bestimmt nicht ganz sauber, sollte aber klappen.

Wenn also obiges Beispiel nicht klappt, dann besteht noch immer die Möglichkeit, einen Verbindungsaufbau zu einer bekannten IP im Netz zu versuchen.

Also beispielsweise über TClientSocket zu einer bekannten IP (da bietet sich eine Webseite über Port 80) an.
Das Problem ist nur, dass auch diese IP mal nicht erreichbar sein kann, obwohl man selber online ist. (auch Server stürzen mal ab ;) )

Grüße

Torsten
Stefan
Hält's aus hier
Beiträge: 3



BeitragVerfasst: Do 27.06.02 21:06 
Also bei mir ist dieser Eintrag REMOTEACCESS gibts bei mir schon. Aber wie gesagt: Ich habe keine Ahnung von der Windows Regestry (hat micht immer irgendwie angeschreckt) und leider kein Buch etc. darüber zur Hand.

Haha :) ! Grade wollte ich posten, da bist du mir zuvor gekommen!

Das hab ich mir auch schon überlegt. Doch ich meine ich hätte mal gehört, dass sich manche Internet Server auf einen Ping nicht zurückmelden. Dennoch haben gerade 100% der Adressen, die ich versucht habe anzupingen reagiert. Man sollte halt populäre nehmen, wie www.gmx.de oder www.google.de. Die sind ja (fast) immer online.

Ich probiers gleich mal richtig aus. Bis denn.
Arakis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 344



BeitragVerfasst: Do 27.06.02 22:03 
Titel: 2 Möglichkeiten
Mir fallen da zwei Möglichkeiten ein: 1. Abchecken, ob man eine Internet-IP hat, wenn man einen leeren String zurück bekommt, dann ist man halt nicht online. Wie man die Internet-IP abfragt, habe ich gerade in das Internet-FAQ gepostet.
2. Möglichkeit wäre über diese Komonente:
dateien.desk-work.de...enten/tmswebconn.zip

Bis dann
user defined image

_________________
Mit dem Computer löst man Probleme, die man ohne ihn nicht hätte.
Entwickler von SpaceTrek: The New Empire - Siehe Hompage!
FriFra
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 557

Win XP Prof, Win XP Home,Win Server 2003,Win 98SE,Win 2000,Win NT4,Win 3.11,Suse Linux 7.3 Prof,Suse Linux 8.0 Prof
D2k5 Prof, D7 Prof, D5 Standard, D3 Prof, K3 Prof
BeitragVerfasst: Fr 28.06.02 00:15 
Das ganze vorhaben ist Unmöglich! Wie soll man auch zwischen Intra und Internet unterscheiden ohne auf externe Resourcen zuzugreifen??? Dieser Zugriff führt allerdings bei den meisten Verbindungsarten zu einer Einwahl, was das ganze sinnlos macht.

Die Einzige Lösung wäre, man würde einen Port reservieren welcher bei allen Verbindungsarten nicht zum Verbindungsaufbau führt. Dann bräuchte man nur noch über diesen Port einen Connect auf einen externen Server zu versuchen. Aber leider wird das nicht gehen, da sich dann alle an diesen Standart halten müssten....
Arakis
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 344



BeitragVerfasst: Fr 28.06.02 00:18 
Titel: Sag niemals Nie!
Sag niemals Nie!
Ich probiere dass morgen mal bei mir in der Firma aus.

Bis dann
user defined image

_________________
Mit dem Computer löst man Probleme, die man ohne ihn nicht hätte.
Entwickler von SpaceTrek: The New Empire - Siehe Hompage!
Torsten
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: Fr 28.06.02 09:22 
Moinsen!

OK, das wäre die eine Möglichkeit.
Doch ich habe da noch was im Kopf. Meines Erachtens nach können die Winshoes Komponenten auch Abhilfe schaffen. Die konnten, so jedenfalls meine Erinnerung, genau feststellen, ob online oder offline. Ein Blick in den Code wäre mal eine Möglichkeit.
Zu finden bei Torry.

Grüße

Torsten
FriFra
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 557

Win XP Prof, Win XP Home,Win Server 2003,Win 98SE,Win 2000,Win NT4,Win 3.11,Suse Linux 7.3 Prof,Suse Linux 8.0 Prof
D2k5 Prof, D7 Prof, D5 Standard, D3 Prof, K3 Prof
BeitragVerfasst: Fr 28.06.02 10:11 
Das können diese Kompos auch nicht, glaub mir! Ich habe selbst ein Lan mit Verbindung nach aussen. Woher wollen denn die Compos wissen, wann der Router online ist? Ohne connect nach aussen geht es nicht, und der bewirkt nun mal meistens einen Verbindungsaufbau...
Sephiroth
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 102



BeitragVerfasst: Fr 28.06.02 11:56 
Hmm mal zu dem Lösungsansatz mit dem TClientsocket und TServerSocket. Ich würde das Problem dann folgendermaßen lösen.
Ich versuche über das Internet auf meinen eigenen Server (also 127.0.0.1) zu connecten. Wenn man nämlich bei der Clientsocket nur den "Host" angibt versucht er soweit ich weiss alles übers Internet zu senden. Erst wenn man bei "Address" eine IP eingibt sendet ers Lokal.
Somit könnte man doch feststellen ob man online ist eigentlich...

Werd ich mal am Wochenende ausprobieren...

Was haltet ihr davon?
FriFra
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 557

Win XP Prof, Win XP Home,Win Server 2003,Win 98SE,Win 2000,Win NT4,Win 3.11,Suse Linux 7.3 Prof,Suse Linux 8.0 Prof
D2k5 Prof, D7 Prof, D5 Standard, D3 Prof, K3 Prof
BeitragVerfasst: Fr 28.06.02 12:35 
Nicht ganz richtig...
Wenn ein Hostname angegeben wird, wird eine DNS Auflösung gemacht, diese führt i.d.R. zum Verbindungsaufbau. Gibt man eine IP an gibt es auf jeden Fall keine DNS Auflösung.
Nun müsste man aber versuchen zu einem externen Host zu connecten um wirklich sicher zu sein, das man offline ist. Und bei genau diesem Versuch scheitert der Ansatz, da dies meist zum Verbindungsaufbau führt!

Zitat:
Ich versuche über das Internet auf meinen eigenen Server (also 127.0.0.1) zu connecten.

Das funktioniert nicht, da 127.0 bzw 192.168 private IP's sind, welche Du übers Internet nie erreichen wirst! Das geht nur mit der IP die Du vom ISP bekommst.
Torsten
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 160



BeitragVerfasst: Fr 28.06.02 13:42 
Hmm, wenn also ein Verbindungsaufbau gemacht wird, dann ist das freilich auch keine Lösung. Schade eigentlich. War nur eine Idee.

Und die Winshoes können das also auch nicht. Wie dumm.

Aber wir finden bestimmt eine Lösung, gemeinsam. ;)

Grüße

Torsten
FriFra
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 557

Win XP Prof, Win XP Home,Win Server 2003,Win 98SE,Win 2000,Win NT4,Win 3.11,Suse Linux 7.3 Prof,Suse Linux 8.0 Prof
D2k5 Prof, D7 Prof, D5 Standard, D3 Prof, K3 Prof
BeitragVerfasst: Fr 28.06.02 17:25 
Das kann nur funktionieren, wenn man für seine Verbindung (Router. Modem etc.) jeweils eine Rolle definieren könnte, wo über einen bestimmten Port nur bei bestehender Verbindung Pakete durchgelassen werden. Nur der Router "weis" ob er online ist...

Nochwas zu Routern. Ich habe ein Tool geschrieben, welches mit sehr vielen gängigen Routern zusammenarbeitet und deren Status ausliest ohne einen Verbindungsaufbau auszulösen. Die Verbindungsdaten werden dann auch in die Registry geschrieben.
ArnF
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Fr 13.09.02 21:51 
Ich hab mal eine Komponente gefunden, mit der der Status einfach überprüft wurde. Mit einem Timer wird ständig die eigene IP-Adresse abgefragt. Hat man eine Adresse, so ist man online.
Hab es nicht ausprobiert und hab von Netzwerken nicht allzuviel Ahnung, aber könnte doch funktionieren.

_________________
Das Leben ist ein Sch...-Spiel, aber die Grafik ist cool.