Moin!
OMG!!!
Delphi-Quellcode:
procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
var s: string;
begin
//wenn wir jetzt sofort daten holen, kann es sein, dass der client noch gar nicht soweit ist.
//ReceiveText() gibt also einen leeren string zurück.
//mit der while-schleife wird erreicht, dass ReceiveText() so oft ausgeführt wird, bis
//endlich daten angekommen sind. das application.ProcessMessages() dient dazu, dass
//unser programm während der schleife nicht "einfriert"
s := socket.ReceiveText();
while s = '' do
begin
s:=socket.receivetext();
application.ProcessMessages();
end;
showmessage(s);
end;
1. ReceiveText kann deine ganze Nachricht gestückelt wiedergeben, daher ist nichtmal gesagt, das ein ReceiveText mit einem Inhalt <> '' das richtige enthält
2. Eine Thread-basierende Kommunikation wieder in ein Polling Abfrage System zu drücken ist wirklich mal eine Leistung.
3. Mit Application.ProcessMessages die
GUI bedienbar machen ohne sich vorher um deren ordentlichen Stand zu kümmern, ist auch mies.
4. OnClientRead nutzen - vorher ist keine Nickangabe möglich. Und wenn im Chat erstmal die
IP Adresse steht und während der Laufzeit durch den übermittelten Nick ersetzt wird. Schliesslich geschieht das im Normalfall im Bereich von Millisekunden - aber ein Polling im OnClientConnect ist wirklich die Härte.
So, und nun zerreisst euch das Maul über meinen Beitrag, ich bin 2 Tage nicht da...