Autor Beitrag
Hoellenwesen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Do 01.07.04 17:36 
Hallo

ich habe mir dei Demos von der indy-homepage heruntergeladen und wollte den chat mal ausprobieren, ich hab den server und den client compiliert und beides gestartet dann die ports und IP-adressen eingegben und verglichen, aber kurz nach dem start des clients, hängt der client sich auf. kann mir jemand sagen woran das liegen könnte?
danke für eure hilfe

MfG

Hoellenwesen
Da_Knuddelbaer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 485



BeitragVerfasst: Mo 05.07.04 08:57 
Hi!

Ich gehe einfach mal davon aus, dass du es an deinem Rechner per localhost als Adresse getestet hast.

Ja, sowohl Client als auch später der Server werden nicht mehr "richtig" reagieren, und zwar beispielsweise, sobald du das Fenster verschiebst oder eine Nachricht verschickst.

Das Problem liegt bei Client.Readln und Server.Readln. Diese Befehle arbeiten im Blocking-Modus. Einmal ausgeführt blockieren diese Befehle das Programm so lange, bis etwas gelesen werden konnte. Daher kannst du zwar Nachrichten weiterhin eintippen und die werden auch versendet, aber du kannst sonst nichts weiter mit der Applikation anfangen, weil er direkt nach dem Versenden die Form wieder blockiert.

Eine Lösung des Problems wären beispielsweise Thread + Anti-Freeze.

Client: Wenn du nicht weißt, wie du einen Thread erstellt und später wieder entfernst, dann benutze die IdThread-Komponente, mit der kannst du alles machen, was man mit normalen Threads auch machen kann. Schreibe in den Thread unter Execute eine Schleife mit dem von weiter oben zu findenden "Einlesen"-Quellcode als Schleifenkörper.
Dann noch IdAntiFreeze drauf, gegebenenfalls aktivieren und fertig.

Server: Hier reicht die Anti-Freeze-Komponente aus, da der IdTCPServer bereits einen Thread-Manager hat (um mehrere Verbindungen zu verwalten).

Anti-Freeze behebt das Blocking von Readln nicht vollständig, daher wird noch der oben beschriebene Thread benötigt.
Und ja, eigentlich haben die Read-Befehle von Client und Server eigentlich ein Read-Timeout (mit einem Standard von 10 Millisekunden)... der funktioniert nur nicht so wie er sollte. *fg*

Wenn es da draußen jemanden gibt, der eine "einfachere" Lösung hat, dann immer her damit *g*

Greetz,
Knuddelbaer
Hoellenwesen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17



BeitragVerfasst: Mo 05.07.04 14:06 
Danke für deine antwort

ich werde es sofort mal testen, und dann werde ich hoffentlioch richtig chatten können :-)

MfG

Hoellenwesen