Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi idTCPClient.Connect + Timeout und Abbruch (https://www.delphipraxis.net/85413-idtcpclient-connect-timeout-und-abbruch.html)

Klaus01 30. Jan 2007 16:07

Re: idTCPClient.Connect + Timeout und Abbruch
 
Hallo,

habe noch folgenden Thread in den NewsGroups gefunden: http://groups.google.de/group/borlan...2020fea855b604

Erklärt vielleicht das Problem.

Und viel Erfolg mit den 10er Indys.

Grüße
Klaus

halinchen 30. Jan 2007 16:10

Re: idTCPClient.Connect + Timeout und Abbruch
 
Danke!
Ich denke es ist genau das was ich suche! :party:

halinchen 30. Jan 2007 16:52

Re: idTCPClient.Connect + Timeout und Abbruch
 
Ich hab jetzt Indy 10 installiert.

Und es geht nicht... :cry:

"Fehler beim Laden von Client.ConnectionTimeOut, Eigenschaft existiert nicht".

Übrigens auch bei einem, außer einem TidTCPClient, komplett leeren Projekt.
Ich probiers erstmal zu beheben, sonst kann ich schlecht weitermachen :wink:

inherited 30. Jan 2007 17:01

Re: idTCPClient.Connect + Timeout und Abbruch
 
Hast du die Pfade gesetzt?

halinchen 30. Jan 2007 17:05

Re: idTCPClient.Connect + Timeout und Abbruch
 
Ja. Ich habe selbst alle (und wirklich alle) Packages in Delphi deinstalliert und die *.bpl Dateien gelöscht. Und musste ich ich alles Packages wieder installieren.

Ich nehm jetzt wieder Indy 9, da gibts auch den TidICMPClienten.
Dann steig ich um wenn ich Zeit habe.

EDIT:
Zitat:

Set TIdICMPClient.Host to the Host IP to be checked.
Set TIdICMPClient.ReceiveTimeout to the number of ms to wait.
Call TIdICMPClient.Ping.
Check TIdICMPClient.ReplyStatus.ReplyStatusType.

If the ReplyStatus.ReplyStatusType <> rsTimeOut then it should be safe to
call Connect using the TCP Client. Otherwise connect will block until the
protocol stack times out.
Ich habs genauso gemacht und die CPU-Auslastung ging auf 100%, sonst passiert nichts. Nach ICMP.Ping ist Schluss;
Nach 2 Minuten hab ich es aufgegeben.
Das hatte es allerdings in einem Thread gemacht.

Ohne Thread funktioniert es!
Auf der Seite schien es bei ihm aber zu klappen, nur bei 2 gleichzeitigen nicht.

Hier mein Code:
Delphi-Quellcode:
var
ICMP:TidICMPClient;
begin
ICMP := TidICMPClient.Create(NIL);
ICMP.Host := Host; //Host, Port, TimeO sind globale Variablen des Thread-Objekts
ICMP.Port := Port;
ICMP.ReceiveTimeout := TimeO;
try
ICMP.Ping;
except
... //Hier Thread beenden
ICMP.Free;
exit;
end;
ICMP.Free;
...
end;
halinchen

P.S. Man muss nicht den ReplyStatus.ReplyStatustype abfragen, sondern den Ping-Befehl in einen try...except...end-Block (zumindest ging es bei mir nur so).

halinchen 1. Feb 2007 13:09

Re: idTCPClient.Connect + Timeout und Abbruch
 
Ich hab jetzt alles mit Indy 10 getestet. Auch kein Unterschied.
Ich werde die Sache jetzt auf sich beruhen lassen. Ich mach es ja nur als Hobby und ich hätte nie gedacht das sowas so kompliziert ist! :shock:

Nochmal ein dickes "DANKE" an alle! :thumb:

halinchen

P.S. Falls ich trotzdem mal rausfinde worin es lag, schreib ich es hier rein. :coder:

halinchen 7. Feb 2007 12:29

Re: idTCPClient.Connect + Timeout und Abbruch
 
Ich hab mir das alles nochmal angeguckt. :shock:
Die Ping-Indy Kompo braucht irgentwelchen RAW-Zugriff.
-> Man muss Admin sein.

Kennt jemand eine Ping-Komponente, mit der man auch als eingeschränkter Benutzer pingen kann?

halinchen 14. Feb 2007 11:37

Re: idTCPClient.Connect + Timeout und Abbruch
 
Für alle die das selbe Problem wie ich haben:
Mit den TimeOut Funktionen der einzelnen Kompos kommt man nicht weiter. :?
Aber es geht doch: :lol:

Ich habe mir einen Thread angelegt, der das Senden übernimmt.
Nun habe ich vor dem Aufrufen des Threads GetTickCount in eine Variable gespeichert.
Und nun in einer Schleife testen ob die Zeit überschritten ist
Delphi-Quellcode:
Tick := GetTickCount;
While (not thread.Terminated) do begin
    Application.ProcessMessages;
    If (GetTickCount-Tick > TimeOut) AND (not thread.state) then break;
    end;
Nochmal zur Erläuterung:
thread.state ist ein Boolean und wird nach dem Verbinden (Client.Connect im Thread.Execute-Teil) auf true gesetzt.
Das habe ich gemacht, das es nicht abbricht wenn es sich schon verbunden hat. Es kann ja sein das das senden etwas länger dauert. :???:

halinchen

//EDIT: Thread.FreeOnTerminate muss True sein, sonst gibt es den Speicher nicht mehr frei!!!

glkgereon 26. Feb 2007 09:07

Re: idTCPClient.Connect + Timeout und Abbruch
 
Ich stehe vor dem selben Problem...

Es kann doch nicht sein dass man um ein ConnectTimeout abzufangen in einem neuen thread anfangen muss den server zu pingen :roll:

Ich mein: ignoriert der IdTCPClient die Eigenschaft "ConnectTimeout" einfach?
Ist doch echt zum heulen :cry:

*anfang thread zu schreiben*

wenn irgendwer noch eine andere Idee hat...hierhin :-)

halinchen 26. Feb 2007 12:35

Re: idTCPClient.Connect + Timeout und Abbruch
 
Du kannst auch unter der Eingabeaufforderung "ping computer /w 1" und "ping computer /w 1000". Da kommt auch kein Unterschied :wink: .

Wenn du Hilfe brauchst kannst mich ja auch fragen. Ist eigentlich auch nicht schwerer. Wenn du willst zeig ich dir den ganzen Quelltext.


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:42 Uhr.
Seite 2 von 3     12 3      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz