Einzelnen Beitrag anzeigen

romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.166 Beiträge
 
Delphi 10 Seattle Professional
 
#3

Re: String an alle Socket-Connections senden???

  Alt 2. Feb 2005, 11:15
Ja, aber wie speichere ich den Socket in einer Liste? Ich habe schon versucht, den Socket-Pointer im Data-Eingenschaft eines TListItems zu speichern. Ich habe damals für jede Verbindung einen ListView-Items erstellt, in dem ich spezifische Verbindungsinformationen darstellte. Etwa so:

Code:
...
type
  ServerClientThread = class(TServerClientThread)
  constructor Create(CreateSuspended: Boolean; ASocket: TServerClientWinSocket; ItemX: TListItem);
  private
    { Private declarations }
  protected
    Line: string;
    Item: TListItem;
  procedure ClientExecute; override;
  procedure AddItem;
  procedure DeleteItem;
end;
...

...
constructor ServerClientThread.Create(CreateSuspended: Boolean; ASocket: TServerClientWinSocket;
ItemX: TListItem);
begin
inherited Create(CreateSuspended, ASocket);
Item := ItemX
end;
...
Beim Erstellen eines Verbinungsthreads erstelle ich einen TListItem und gebe diesen an den Thread weiter:

Code:
...
procedure TForm1.ServerSOcket1GetThread(Sender: TObject; ClientSocket: TServerClientWinSocket; var SocketThread: TServerClientThread);
var
Item: TlistItem;
begin
  Item := ListView1.Items.Add;
  SocketThread := ServerClientThread.Create(true, ClientSocket, Item);
  Item.Data := Pointer(SocketThread);
  SocketThread.Resume
end;
...
Der Thread ergänzt dann den Item mit empfangenen Identifikationsdaten des Clients.

Wenn ich dann an einen bestimmten Client etwas senden möchte:

Code:
...
var
Item: TLietItem;
begin
Item := ListView1.ItemFocused;
if assigned(Item.Data) then
TServerClientThread(Item.Data).ClientSocket.SendText('irgendein Text')
end;
...
oder an alle Clients:

Code:
...
var
i: integer;
begin
 for i := 0 to ListView1.Items.Count - 1 do
 begin
   if assigned(ListView1.Items.Item[i].Data) then
   TServerClientSocket(ListView1.Items.Item[i].Data).ClientSocket.SendText('irgendein Text')
 end;
end;
...
Zumindest ich habe es mir so vorgestellt. Die obige Code fuktioniert aber nicht. Die Threads werden normal erstellt, Item wird hinzufügt, alles wunderbar - bis auf Senden von Informationen. Sobald ich etwas wie oben beschrieben senden möchte, hängt sich der Server auf.

Was den nun? Hat jemand einen Code-Beispiel? Wäre sehr dankbar!

MfG,
Ralfi
  Mit Zitat antworten Zitat