![]() |
TCP-Chat-Client hängt sich auf ..
Hallo DPler
ich hab mir mal so ein kleines ChatProggi mit Client und Server , als einzelne Programme zusammengebastelt .. wenn ich mit dem Client zum Server connecte ist alles wunderbar .. nur wenn ich vom Client zum Server ne nachricht schicke , freezed mein Client und manchmal sogar WinXP .. in meinem Client hab ich einen TCPClient zum Lesen der Nachrichten mit Timer ; und einen zum Verschicken der Nachrichten , der connected, schickt und disconnected wieder. der Timer zum Lesen ist auf 500ms eingestellt ; und noch ein Problem : wenn ich eine Nachricht verschickt habe , lassen sich zwar Nachrichten dank dem AntiFreeze noch verschicken , aber das Programm lässt sich nichtmehr verschieben es gab zwar schon einige Leute mit der selben(ähnlichen Frage , aber ihnen wurden die fragen nicht beantwortet .. (ist mir nur so aufgefallen , also nichts gegen irgendjemanden) Hoffe auf baldige Antwort CU |
Re: TCP-Chat-Client hängt sich auf ..
nachtrag:
der Chat ist mit den INDYs gemacht sorry ... vergessen :angle: |
Re: TCP-Chat-Client hängt sich auf ..
Hallo NixChecker... (?! ;)
Du wirst doch Deinem Namen nicht alle ehre machen, oder? ;) Hast Du schon mal ein kleineres TimeOut probiert? Es kann leicht Überschneidungen geben, wenn das Intervall des Timers schon recht klein gesetzt ist (z.B. auf 1000) - ich halte es mit 500ms sehr hoch (ich arbeite mit Werten von 10 - maximal 100) Dass sich Dein Betriebssystem aufhängt halte ich für sehr unwahrscheinlich. MfG Michael Wollert |
Re: TCP-Chat-Client hängt sich auf ..
Hi,
kann sein dass es daran liegt, dass ich mit den Indy TCP/IP- Sachen noch nicht viel gearbeitet habe, aber kann man das Empfangen von Nachrichten nicht im OnRead- Event der jew. Komponente bewerkstelligen? Oder meint ihr mit Timer was anderes als die Kompo mit dem Uhr-Symbol unter "System"? Bis dann, S - tefano |
Re: TCP-Chat-Client hängt sich auf ..
Hiho,
IdTCPServer - hier gibt es das Ereignis "OnExecute". Immer wenn Daten "reinkommen" und Du nicht auf diese "wartest" (durch ein ReadLn z.B.) wird dieses ausgelöst. IdTCPClient - hier musst Du Dich selbst um die Datenabholung kümmern. Hierfür verwende ich normalerweise eine TTimer, den ich auf 1 Sekunde stelle. Dann liest Du per ReadLn, kontrollierst ob was empfangen wurde und arbeitest Deinen Code ab. @S-tefano: Ja, mit Timer meinte ich exakt diese Komponente. Hoffe geholfen zu haben. Michael Wollert |
Re: TCP-Chat-Client hängt sich auf ..
Moinsen!
also ich hab das alles mal ausprobiert, was ihr hier rein geschrieben habt. Allerdings hängt sich mien Client immer noch auf. Habe Indy 9, Delphi 7 und WinXP. Selbst die Demo hängt sich auf. Hab das Timeout auf 100, 500 und 1000 gestellt. Den Interval vom, Timer hab cih auch geändert, aber wirklich gebrahct hat das nix. So wie es aussieht, hängt sich das ding immer auf, wenn keine Daten vorhanden sind. Sprich er (bei der Demo z.B.) bekommt die Anmelde Sequenz und die Willkommens Nachricht und dann ist schluss. Dann steht das Prog. Ist sehr mysteriös. Man sollte bei Indy echt mal ein OnExecute Event mit einbauen. Weil mit Timer find ich das net so schön ;). Aber das ja auch nu egal. Auf jeden bleibt daws Proggy imemr hängen. Jemand ne Idee woran das liegen könnte? Wäre super wenn mir einer helfen kann. Gruss Killian |
Re: TCP-Chat-Client hängt sich auf ..
Hi,
habe mir nicht alles durchgelesen aber zeig doch mal den CODE dann ist es meistens leichter den Fehler zu eleminieren! @wardz T-2 TAge :cheers: |
Re: TCP-Chat-Client hängt sich auf ..
Anstatt mit einem Timer zu arbeiten sollte man Threads verwenden!
Dann gibt's keine Probleme mehr. |
Re: TCP-Chat-Client hängt sich auf ..
Zitat:
Mit den Threads hab ich es noch net versucht...ich probier es mal und berichte :wink: Danke schonmal bis heirhin :-D |
Re: TCP-Chat-Client hängt sich auf ..
si ist es bei mir auch... also mit der demo, soballt sich die clients mit dem server verbinden friehren diese ein, also man hat dann keine rückmeldung mehr.. wenn ich aber mit dem server ne nachricht an einen clienten schicke, kann man diese lesen aber der clinte funtz immer noch net, also man kann nichts anklicken
|
Re: TCP-Chat-Client hängt sich auf ..
Moinsen!
Also es geht mit Threads....sogar besser als ich gedacht habe. Wenn ihr die INDY Demos habt, dann schaut auch mal die demo im Verzeichnis "IdTCPDemo" an....die funzt einwandfrei. Hab mich da zwar erst ein bissel schwer mit dem code gaten aber midder Hilfe kriegt man ja alles raus. Gruss Killian PS THX @ Kamil 8) |
Re: TCP-Chat-Client hängt sich auf ..
stimmt, di efuntz fehlerfrei, aber kann man di eauch übers www nutzen und so umschreiben das man sein nick eingeben kann ect... halt wie bei dem anderem chat-demo??? wenn ja, könnte jemand den code posten bzw. schreiben wie?
|
Re: TCP-Chat-Client hängt sich auf ..
Verabschiedet sich bei euch nicht der Server wenn man ihn schließt mit:
Delphi-Quellcode:
Der Server meldet sich dann immer mit : "Zeitüberschreitung beim Beenden der Threads"
TCPServer.Active := False;
wenn ich den server einfach auf active = false setze. Wenn ich versuche die Threads zu terminieren mit.
Delphi-Quellcode:
Meldet sich der Debugger mit dem Fehler in der Klasse: EIdTerminateThreadTimeout.
IdThreadMgrDefault1.TerminateThreads;
Die Kompilierte Anwendung mit: "Zeitüberschreitung ..." Ich muss sagen in der Delphi Programmierung bin ich neu, und wie das mit den Threads gemanged werden soll versuche ich eigentlich gerade anhand eines eigenen Chats zu verstehen, nur habe ich das Gefühl das die Demo´s outdated sind? Kann mir vllt. irgendjemand in kurzform versuchen die IdThreadMgrDefault Komponente zu erklären und wie man sie sauber programmiert einsetzt? |
Re: TCP-Chat-Client hängt sich auf ..
Hey Leute,
ich hab das gleiche Problem (Prog mit TIdTCPClient(Indy9) hängt sich auf!) Ich bin zum Glück in der Lage auf D6 und D7 zu testen. Mit D6Prof kompiliert funzt die Sache wunderbar, aber wehe ich kompiliere denselben Code mit D7Prof; dann hängt sich das Programm auf! Was soll denn das!? HIIILFE!!! |
Re: TCP-Chat-Client hängt sich auf ..
Eine kleine Lösung, die zwar noch eine Compilermeldung aber keinen Laufzeitfehler mehr bringt:
procedure TMain.Ende(Sender: TObject); var i:Integer; tx:TList; begin tx:=IdTCPServer.Threads.LockList; for i:=0 to tx.count-1 do TIdPeerThread(tx[i]).Connection.DisconnectSocket; IdTCPServer.Threads.UnlockList; IdTCPServer.active:=false; end; Achtung: Mit "Disconnect" funktioniert es (bei mir) nicht. |
Re: TCP-Chat-Client hängt sich auf ..
also ich hab das folgendermassen gelöst:
aber bevor ich anfange noch ein punkt...
Code:
damit der code verständlich wird ;)
srv: TIdTCPServer;
cli: TIdTCPClient; client-send code:
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
begin cli.OpenWriteBuffer; cli.WriteInteger(length('hello')); cli.Write('hello'); cli.CloseWriteBuffer; end; server-code:
Delphi-Quellcode:
procedure TForm1.srvExecute(AThread: TIdPeerThread);
var tmp: string; begin tmp := athread.Connection.ReadString(athread.Connection.ReadInteger); if tmp = 'hello' then begin AThread.Connection.WriteInteger(length('helloagain')); AThread.Connection.Write('helloagain'); end; end; client receive code:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
var tmp: string; begin if cli.Connected then begin cli.ReadTimeout := 10; // WICHTIG !!! sonst hängt er sich auf ... try tmp := cli.ReadLn; if length(tmp) > 0 then showmessage(tmp); except // end; end; end; gibt dabei nur ein problem ... jedes mal wenn der timer ausgelöst wird und keine daten zum client gesendet wurden, wird eine exception ausgelöst ... sehr nerfig, wenn der timer auf 100 steht *fg* also hab ich zum testen des projekts die delphi-exceptions ausgeschaltet ... auch nicht die beste methode aber was anderes kommt mir jetzt nicht in den sinn... greetz -FastJack2 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz