Servus, Dragon27!
zu 1:
Ja es ist zulässig. der client wartet beim readln solange(die app freezt) bis etwas vom server kommt.
Deswegen lagert man normalerweise die komplette client komponennte in einen thread aus.
zu 2:
Kann man auch einmal beim start connecten und dann ist das ding stabil bis einer von beiden den löffel abgibt.
zu 3:
Am besten du legst in der server app einen array of TidContext (irgendwie so muss das heißen ^^) an und speicherst in dem onConnect des servers den context ab. Der is für jeden client individuell. (Wenn du mehere clients hinter dem gleichen router hast, also die gleiche incoming
ip dann musst du dem client eine id geben und auf den ids basierend deinen traffic managen). Das speichern der clients mach ich immer mit einem record, der alle nötigen infos enthält.
Beispiel:
Delphi-Quellcode:
...
type
TConnection =
record
id : Integer;
IP :
String;
nick :
String;
con : TIdContext;
ready : boolean;
end;
type
TConnections =
array of TConnection;
...
var
connections: TConnections;
...
MfG - Ghost007
//Edit: Hab dir mal meine clientthread
unit angehängt, sie reagiert zwar nicht auf alle events, die kannst du dir ja im notfall noch ergänzen(Ich hab die nich gebraucht ^^).