Entwickler-Ecke

Internet / Netzwerk - Online oder was...?


Logi5 - Sa 12.02.05 18:57
Titel: Online oder was...?
Liebe Delphi-Gemeinde,

ich beschäftige mich seid einiger Zeit mit einem Problem.

Ich suche eine funktion, die eine Variable auf true oder false setzt, je nach dem, ob der rechner im Web ist oder nicht.
Ich habe bereits eine Funktion, jedoch hat diese den Nachteil, das sie eine Fehlemeldung erzeugt, wenn der Rechner nicht online ist.

Kann mir da jemand weiterhelfen?


Sprint - Sa 12.02.05 19:05


Delphi-Quelltext
1:
2:
uses
  WinInet;


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.Button1Click(Sender: TObject);
var
  dwConnectedStateFlags: DWORD;
begin

  if InternetGetConnectedState(@dwConnectedStateFlags, 0then
    if (dwConnectedStateFlags or INTERNET_CONNECTION_MODEM) = dwConnectedStateFlags then
    begin
      // ...
      ShowMessage('Verbindung besteht. Vielleicht auch nicht. Es gibt keine 100%ig Lösung für deine Frage.');
      // ...
    end;

end;


Es gibt keinen sicheren Weg, um festzustellen ob jemand Online ist oder halt nicht.


retnyg - Sa 12.02.05 19:11

das würde ich nicht sagen. habe mal einen source gesehen zum auflisten der netzwerkadapter, wenn der netzwerkadapter WAN eine ip hat is man auch online.

alternativ könnte man ja folgenden einfachen trick machen: einen host anpingen der immer online is wie z.b. http://www.google.com
kommt ein reply so hat man ne verbindung


Delete - Sa 12.02.05 19:13

ja und wenn du dial on demand hast wählt er sich beim pingen erst ein und ist dann online....das geht also auch nicht!


retnyg - Sa 12.02.05 19:15

achso, der anwender soll die überprüfung ned mitbekommen... ja dann wirds schon schwerer.


Sprint - Sa 12.02.05 19:17

retnyg hat folgendes geschrieben:
wenn der netzwerkadapter WAN eine ip hat is man auch online.

Tja, und wenn du deine Internet Daten über LAN von einem anderen PC/Server beziehst, dann bringt dir das auch nichts.

Zitat:
alternativ könnte man ja folgenden einfachen trick machen: einen host anpingen der immer online is wie z.b. http://www.google.com kommt ein reply so hat man ne verbindung

Das kann aber den unschönen Nebeneffekt haben, dass das DFÜ Einwahlfenster aufspringt.


Logi5 - So 13.02.05 01:48

ok, ich kann also nicht sicher feststellen, ob der rechner im Internet ist.
Dann formuliere ich das ganze anders:

Das Programm soll eine funktion haben, die ei update runterläd. Ich schreibe die funktion einfach mal im Klartext

funktion ob online: Ja oder nein

wenn ja ( auch wenns nicht sicher ist) dann

lade Datei Update.zip vom Server http://www.irgendwas.de (wenn sie neuer ist, als die, die auf dem Rechner ist)

sollte dieses laden fehl schlagen, gebe keine Fehlermeldung aus, sondern beende das ganze einfach.


Das ganze könnte mit einem Timer alle 10 minuten oder so erneut gemacht werden


Sprint - So 13.02.05 02:00

Das ist ja eine Frage, die schon manch ein Programmierer hatte. Ich würde in dein Programm ein Dialog machen, wo der Benutzer selber Einstellungen vornehmen kann. z.B. ob automatisch oder manuell nach Updates geschaut werden soll.
Beim ersten Aufruf von deiner Updatefunktion, würde ich eine MessageBox einbleden. Wo der Benutzer darüber informiert, das für die Suche nach einen Update eine Internetverbindung bestehen muss. Außerdem würde ich dieser MessageBox eine CheckBox verpassen. Damit der Benutzer die Möglichkeit hat, das beim nächsten Update diese MessageBox wieder erscheint oder es halt gleich weitergeht. Dann sieht dein Programm auch sehr professionell aus und der Benutzer freut sich, das er selber mit entscheiden darf.


Delete - So 13.02.05 11:39

Ehrlich gesagt.

Wenn dein Programm versuchen würde zu prüfen ob ich online bin und sich meine Verbindung dadurch automatisch einwählt würde ich dein prog sofort löschen und weitere schritte einleiten...

Machs mit nem dialog und gut!

Kidix


reepo2k - So 13.02.05 11:47

Wäre es nicht besser erst zu überprüfen, ob eine neue Version online ist und nur wenn eine neue Version verfügbar ist diese runter zu laden?

Würd nämlich viel Traffic werden, wenn das Programm bei jedem Start ne neue Version runterkädt.


MfG: reepo2k


Delete - So 13.02.05 11:49

und ob er sich dabei auf der legalen ebene befindet mag ich bezweifeln...

ich sagte ja wenn sein programm erst meine verbindung aufbaut und dann auch noch autmatisch was runterläd würd ich anzeige erstatten!


Logi5 - Mo 14.02.05 02:05

nu mal halblang...

jeder popelige Virenscanner updatet sich automatisch. Und Windows Updates kommen auch einfach so, wenn man die Funktionen nicht abschaltet. Hast du die schon alle Verklagt? *lol

die Funktion ist natürlich auch bei meinem Programm abschaltbar..

Jede .exe auf einem Computer stellt eine potentielle Bedrohung da. Also was sollen diese Unterstellungen?


oPPi - Mo 14.02.05 13:18

Hy wie wär's mit sowas:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Uses
   WinInet;


function IsConnectedToInternet : boolean;
begin
  result := (InternetGetConnectedState(nil0))
end;

//Aufruf
procedure TForm1.Button1Click(Sender: TObject);
begin
 if IsConnectedToInternet then
   ShowMessage('Verbunden.')
 else
   ShowMessage('nicht Verbunden');
end;


gefunden bei: http://www.SwissDelphiCenter.ch

Du kannst natürlich anstatt ShowMessage auch ein Editfeld / CheckBox oder ähnliches verwenden.


Delete - Mo 14.02.05 13:48

Es gibt keine 100 prozentige Lösung. Siehe hier: http://www.marian-aldenhoevel.de/dojo/internet.html


wham1010 - Mi 27.07.05 13:48

Also, bei dem hier schreibt er mir IMMER "Nicht verbunden" hin - obwohl ich definitiv mit dem Internet verbunden bin!
(Router + Breitband)

user profile iconoPPi hat folgendes geschrieben:
Hy wie wär's mit sowas:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
Uses
   WinInet;


function IsConnectedToInternet : boolean;
begin
  result := (InternetGetConnectedState(nil0))
end;

//Aufruf
procedure TForm1.Button1Click(Sender: TObject);
begin
 if IsConnectedToInternet then
   ShowMessage('Verbunden.')
 else
   ShowMessage('nicht Verbunden');
end;


gefunden bei: http://www.SwissDelphiCenter.ch

Du kannst natürlich anstatt ShowMessage auch ein Editfeld / CheckBox oder ähnliches verwenden.


blaueled - Mi 27.07.05 18:08

nimm einen TClientsocket und als IP http://www.google.de (oder was für dich passt) port 80 und
bei einem Fehler inet := false und den Errorcode auf 0 setzen.
bei Verbindung inet := true und verbindung beenden.

Arne


Experience1986 - Mi 17.08.05 15:11

Hi,

das mit dem ClientSocket hab ich noch gar nicht in betracht gezogen. interessante und einfache idee.

Der Code der oben schonmal gepostet wurde:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
function IsConnectedToInternet : boolean;  
begin  
  result := (InternetGetConnectedState(nil0))  
end;  

 
//Aufruf  
procedure TForm1.Button1Click(Sender: TObject);  
begin  
 if IsConnectedToInternet then  
   ShowMessage('Verbunden.')  
 else  
   ShowMessage('nicht Verbunden');  
end;


Kan bei Router nicht funktionieren, da dieser Code nur prüft ob eine DFÜ verbindung besteht.