Autor |
Beitrag |
Obscure
      
Beiträge: 19
Delphi 5
|
Verfasst: So 01.10.06 15:54
Hey Folks...
ich habe ein recht schwieriges Problem:
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 begin ftp.Connect; ftp.Download('REMOTEDATEI','C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\FilmDatenbank.txt'); Listbox.Items.Loadfromfile('C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\FilmDatenbank.txt'); ftp.Disconnect; end except else 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
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
      
Beiträge: 232
Win XP SP2, Ubuntu 6.06
Delphi 7 PE, Delphi 3 Prof
|
Verfasst: 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
      
Beiträge: 1314
Debian Squeeze, Win 7 Prof.
D7 Pers
|
Verfasst: 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 
_________________ If liberty means anything at all, it means the right to tell people what they do not want to hear. - George Orwell
|
|
Obscure 
      
Beiträge: 19
Delphi 5
|
Verfasst: 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
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: So 01.10.06 16:55
Obscure 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 
      
Beiträge: 19
Delphi 5
|
Verfasst: So 01.10.06 17:01
AXMD 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
      
Beiträge: 4006
Erhaltene Danke: 7
Windows 10 64 bit
C# (Visual Studio 2019 Express)
|
Verfasst: 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
|
Verfasst: 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
      
Beiträge: 1314
Debian Squeeze, Win 7 Prof.
D7 Pers
|
Verfasst: 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
|
Verfasst: 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
      
Beiträge: 417
Erhaltene Danke: 2
XP
FPC mit Lazarus
|
Verfasst: 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
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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.  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?)...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Danny W.
      
Beiträge: 296
Windows XP, WIN 2000
Delphi 2005 PE
|
Verfasst: 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
      

Beiträge: 10183
Erhaltene Danke: 1256
W10ent
TP3 .. D7pro .. D10.2CE
|
Verfasst: Mo 30.10.06 00:18
Moin!
Mantis1987 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...
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|
Danny W.
      
Beiträge: 296
Windows XP, WIN 2000
Delphi 2005 PE
|
Verfasst: Mo 30.10.06 00:24
1:0 für dich Narses
mfG
|
|