Autor Beitrag
Coolman1974
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 38



BeitragVerfasst: Fr 29.12.06 13:45 
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:
ausblenden 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:
ausblenden 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!