Autor Beitrag
Obscure
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19


Delphi 5
BeitragVerfasst: So 01.10.06 15:54 
Hey Folks...

ich habe ein recht schwieriges Problem:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
begin
   try
    if (checkftp.Checked = true) and (edhost.text <>''and (eduser.text <> ''and ( edpasswort.text <>''then
        //try
           begin
           //FTP Verbindung Herstellen
           ftp.Connect;                    // Connecten auf den FTP-Server
           //Download der Textdatei
           ftp.Download('REMOTEDATEI','C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\FilmDatenbank.txt');
           //Schreiben der Textdatei in die Listbox
           Listbox.Items.Loadfromfile('C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\FilmDatenbank.txt');
           //Ftp Verbindung abbrechen
           ftp.Disconnect;
                   end
          except
          else
             //Wenn keine Verbindung hergestellt den Open Dialog öffnen
             if OpenDialog1.Execute then
             Listbox.Items.LoadFromFile(OpenDialog1.Filename);
           end;


Die schon kommentiert, soll, wenn keine Verbindung besteht der Open Dialog aufgerufen werden. Ebenfalls soll NUR versucht werden zu connecten wenn
ausblenden Delphi-Quelltext
1:
2:
   try
    if (checkftp.Checked = true) and (edhost.text <>''and (eduser.text <> ''and ( edpasswort.text <>''then
ok ist. Die Funktion an sich MIT Internetverbindung fuktioniert. Wenn ich jedoch mein internet sperre und ich dann mein programm starte zeigt der mir nen fehler: Irgendas mit Host-Lookup bla bla. Weißt mich dann im Code auf die Zeile wo ftp.connect steht.

Wie kann ich also das Problem löschen? Ich habe mir überlegt einen Ping sendne zu lassen, dies würde aber 1. zu lange dauern UND der angepingte Server könnte ja auch mal down sein. Ok man kann 2 server anpingen, würde ja aber noch länger dauern. Gibt es also noch eine andere Möglichkeit?

PS: Die oben beschriebene Prozedur wird bei FormCreate aufgerufen.
fidionael
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 232

Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
BeitragVerfasst: So 01.10.06 16:19 
Hallo,

die ernüchternde Antwort ist, dass es dir völlig unmöglich ist, rauszufinden, ob eine Verbindung zum Internet besteht. Hierzu lohnt sich eventuell auch ein Blick in diese Geschichte. Du wirst dir also etwas anderes einfallen lassen müssen.

Wie wäre es denn, den Benutzer einfach zu fragen, ob eine solche besteht?
Timosch
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1314

Debian Squeeze, Win 7 Prof.
D7 Pers
BeitragVerfasst: So 01.10.06 16:20 
Man kann AFAIK nicht herausfinden, ob eine Verbindung besteht.
Theoretisch:
1.) InternetGetConnectedState: Ruft aber nur die IE-Einstellungen ab.
2.) Ping: Unter Umständen wird bei manchen Leuten automatisch eine Verbindung aufgebaut.

//EDIT: Mist, zu langsam :autsch:

_________________
If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
Obscure Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19


Delphi 5
BeitragVerfasst: So 01.10.06 16:49 
es muss doch ne möglichkeit geben dass man überprüft ob man internet hat. so was ähnliches wie der ping oder tracert. Irgendws was auf jedenfall internet braucht...

Gibt es denn sonst eine möglichkeit, ohne den Benutzer fragen zu müssen, ob internet vorhanden ist oder nicht?

Es geht ja darum, dass er sich entwerder, wenn internet vorhanden ist, vom FTP eine .txt-datei zieht ODER wenn kein Internet vorhanden ist die möglichkeit einer lokalen txt-datei zu öffnen.
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: So 01.10.06 16:55 
user profile iconObscure hat folgendes geschrieben:
es muss doch ne möglichkeit geben dass man überprüft ob man internet hat. so was ähnliches wie der ping oder tracert. Irgendws was auf jedenfall internet braucht...


Es wurde zwar bereits zweimal erwähnt, aber ich erwähne es sicherheitshalber ein drittes Mal, da mir scheint, dass du das ignorierst: es gibt Leute, bei denen ein Ping bereits ausreicht, um eine Internetverbindung aufzubauen, wenn keine besteht. Es gibt bei einigen Routern z.B. die Möglichkeit, "interesting traffic" zu definieren, durch den das Wählen einer (zB ISDN-)Verbindung ausgelöst werden kann. Wenn du also ein ICMP-Paket losschickst, kann es, sofern es als "interesting traffic" definiert ist, also das Wählen auslösen, womit du eine Internetverbindung hast, die zuvor gar nicht bestanden hätte.

AXMD
Obscure Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 19


Delphi 5
BeitragVerfasst: So 01.10.06 17:01 
user profile iconAXMD hat folgendes geschrieben:


Es wurde zwar bereits zweimal erwähnt, aber ich erwähne es sicherheitshalber ein drittes Mal, da mir scheint, dass du das ignorierst: es gibt Leute, bei denen ein Ping bereits ausreicht, um eine Internetverbindung aufzubauen, wenn keine besteht. Es gibt bei einigen Routern z.B. die Möglichkeit, "interesting traffic" zu definieren, durch den das Wählen einer (zB ISDN-)Verbindung ausgelöst werden kann. Wenn du also ein ICMP-Paket losschickst, kann es, sofern es als "interesting traffic" definiert ist, also das Wählen auslösen, womit du eine Internetverbindung hast, die zuvor gar nicht bestanden hätte.

AXMD


ich habe es nicht ignoriert. Es soll doch aber keine hergestellt werden. es soll nur "geprüft" werden ob eine besteht oder nicht...
AXMD
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 4006
Erhaltene Danke: 7

Windows 10 64 bit
C# (Visual Studio 2019 Express)
BeitragVerfasst: So 01.10.06 17:07 
Wie dir bereits mehrfach gesagt wurde: es gibt keine Möglichkeit, zu überprüfen, ob eine Internetverbindung besteht.

AXMD
TrustNoOne
Hält's aus hier
Beiträge: 6


Delphi 5 Enterprise, TurboDelphi
BeitragVerfasst: Di 03.10.06 14:36 
Hallo zusammen,

ich finde, es gibt eine Möglichkeit um herauszufinden ob man Online ist oder nicht. Auch wenn man sich hinter einem Router befindet. Es gibt nur den einen Haken, dass wenn in dem Router eingestellt ist das er die Verbindung dauerhaft aufrecht erhält und keine Daten mit dem Internet ausgetauscht werden, dann wird es wohl nicht erkannt werden.(Aber spätestens nach 24 Stunden, wenn eine erzwungende Trennung seitens des Anbieters erfolgt).

So, mal zur Theorie:
Man lässt sich mit "GetTCPTable" aus der IPHLPAPI.dll einfach die aktuellen Verbindungen anzeigen. Ähnlich wie es Netstat macht.
Dann vergleicht man die IP, die zuletzt eine Verbindung hatte, ob sie eine Class-C IP ist, wenn ja dann versucht man es 10sekunden später nochmal, weil dann sind wir ja wohl nur in einem normalen Netzwerk. Wenn sie keine ist, dann besteht wohl eine Verbindung zum Internet.

Der Vorteil ist, dass so kein Verbindungsaufbau erzwungen wird (weder Router noch Einwähl-Fenster), weil ja nichts im Netz angefragt sondern nur abgehört wird.
Ich benutze diese Methode nun schon seit über einem Jahr und bin sehr zufrieden damit.


mfg
TrustNoOne
Timosch
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1314

Debian Squeeze, Win 7 Prof.
D7 Pers
BeitragVerfasst: Di 03.10.06 16:41 
Es könnte aber doch sein, dass man am Internet hängt, aber die letzten TCP-Pakete einfach nur ins lokale Netzwerk gingen.

_________________
If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
TrustNoOne
Hält's aus hier
Beiträge: 6


Delphi 5 Enterprise, TurboDelphi
BeitragVerfasst: Di 03.10.06 17:12 
Zitat:

Es könnte aber doch sein, dass man am Internet hängt, aber die letzten TCP-Pakete einfach nur ins lokale Netzwerk gingen.


Ja, deswegen überprüft man dann ja am besten alle 10 sekunden (nur zum Beispiel). Irgendwann wird man ja mal mit dem Internet kommunizieren.



mfg
TrustNoOne
rizla
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 417
Erhaltene Danke: 2

XP
FPC mit Lazarus
BeitragVerfasst: Di 03.10.06 17:28 
und was ist hiermit?
www.delphi-forum.de/...hlight=online+status
da gehts doch ums prüfen des online statuses.. oder hab ich den thread nicht verstanden..
:r:

_________________
if you have what they want - they'll find a way to take it (bruce sterling)
WOW - 10 JAHRE Mitglied beim Delphi-Forum. Wie die Zeit vergeht, Freunde.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 03.10.06 22:51 
Moin!

Man kann zwar mit allen möglichen Methoden praktisch beliebig nahe an eine vermeintliche Lösung herankommen (sei es per RAS-API, Ping, IP-Helper-API, was auch immer), aber es ist nun mal leider prinzipiell unmöglich, das Problem immer und zustandsneutral (also nichts durch die Methode am Onlinezustand zu verändern, wie z.B. Ping) zu lösen. :| Das ist einfach eine Tatsache, da geht kein Weg dran vorbei. :(

Jemand, der das bezweifelt, bleibt den Beweis schuldig, wie das zu lösen ist. :D Ich empfehle die Dojo-Geschichte als Lektüre (s.o.). ;) Bisher habe ich in jeder Lösung einen Haken entdeckt: entweder der Online-Zustand wird bei der Ermittlung verändert (Ping-ähnliche Lösungen) oder kann nicht 100%ig ermittelt werden (z.B. die TCP-Table-basierte Lösung: hier wird unterstellt, dass einfach irgendwann ein Host im Internet kontaktiert wird; tja, was ist, wenn (bisher noch) nicht?)... :mahn:

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Danny W.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 296

Windows XP, WIN 2000
Delphi 2005 PE
BeitragVerfasst: So 29.10.06 11:04 
Ich weiß jetzt ehrlich gesagt nicht richtig was gemeint ist :) aber ich hab mal soetwas gelöst indem ich mit einer mysql db-gearbeitet hab...client, server und db.
Client geht online (onCreate schickt was zum server) server guckt in db und schreibt für den client eine '1' ins 'client.online'-integer feld. Wenn man jetzt abfragen will...muss man einfach die db abfragen, ob dort eine 1 vorhanden ist... beim onDestroy schickt der client wieder was an den server..

server sagt 'client.online=0'

usw.

mfG
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mo 30.10.06 00:18 
Moin!

user profile iconMantis1987 hat folgendes geschrieben:
ich hab mal soetwas gelöst indem ich mit einer mysql db-gearbeitet hab...client, server und db.
Client geht online (onCreate schickt was zum server)

Und genau an dieser Stelle ist das eigentliche Problem: ist der Client mit dem Internet verbunden? Kann er den Server überhaupt erreichen? DAS ist das Problem. Lösung: siehe oben... :roll: ;)

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.
Danny W.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 296

Windows XP, WIN 2000
Delphi 2005 PE
BeitragVerfasst: Mo 30.10.06 00:24 
1:0 für dich Narses ;)

mfG