Hallo zusammen,
ich komme beim Senden des Servers an alle Clienten nicht weiter.
Ausgangslage:
Ich verwende Indy10 und somit IdTCPServer und den Clienten dazu.
Das Senden von allen Clienten an den Server funktioniert.
Das Empfangen auf dem Server funktioniert.
Problem:
Ich möchte, das wenn Client1 etwas sendet, das der gesendete String an alle anderen Clients gesendet wird.
Ich habe gelesen, das es eine TIdThreadList giebt. Werden hier die Verbindungen zu den Clienten organisiert ?
Wenn ja, wie kann bzw. muss ich auf die einzelnen Verbindungen zugreifen.
Ich hatte es erstmal mit ner TList versucht, aber da bekommt immer nur ein Client etwas empfangen(undzwar der, der auch gesendet hat).
Hier mein Server-Versuch:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| procedure TForm1.OnExecuteServer(AContext: TIdContext); var Line: String; Msg: String; ClientID: String; I: Integer; begin while Line <> '[END]' do begin Line := AContext.Connection.IOHandler.ReadLn; if Line = '[MESSAGE]' then Msg := AContext.Connection.IOHandler.ReadLn; if Line = '[ID]' then ClientID := AContext.Connection.IOHandler.ReadLn; end;
for I := 0 to FClientList.Count - 1 do begin TIdContext(FClientList.Items[I]).Connection.IOHandler.WriteLn( 'Client['+ ClientID + ']: ' + Msg); end; Memo1.Lines.Add('Client[' + ClientID + ']: ' + Msg); end; |
Die TList wird beim connecten der einzelnen Clients bestückt:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure TForm1.OnConnectServer(AContext: TIdContext); var ID: String; begin AContext.Connection.IOHandler.WriteLn('[MESSAGE]'); AContext.Connection.IOHandler.WriteLn('Hallo Client'); AContext.Connection.IOHandler.WriteLn('[ID]'); ID := IntToStr(FClientList.Add(AContext)); AContext.Connection.IOHandler.WriteLn(ID); Memo1.Lines.Add('Server: Client[' + ID + '] hat sich angemeldet'); end; |
Hat jemand ne Ahnung wie man das richtig macht ?
Danke!