![]() |
TIdTCPServer : An Gruppe verbundener Clients senden
Moin !
Habe da einen TIdTCPServer wo sich Client connecten können:
Delphi-Quellcode:
Soweit so gut. Nun möchte ich an alle conecteten Client eine Nachricht senden. Ich habe folgendes probiert:
type
PClient = ^TClient; TClient = record PeerIP : string[15]; { Cleint IP address } HostName : String[40]; { Hostname } Command : String[100]; WindowHandel : HWND; {Window Handle der Applikation} WindowPosX, WindowPosY, WindowWidth, WindowHeight : SmallInt; Connected : TDateTime; { Time of connect } Thread : Pointer; { Pointer to thread } end; procedure TMainFormServer.TCPServerConnect(AContext: TIdContext); var NewClient: PClient; begin GetMem(NewClient, SizeOf(TClient)); NewClient.PeerIP := AContext.Connection.Socket.Binding.PeerIP; NewClient.Connected := Now; NewClient.Thread := AContext; AContext.Data := TObject(NewClient); try Clients.LockList.Add(NewClient); finally Clients.UnlockList; end; end; (* TCPServer Connect *)
Delphi-Quellcode:
Das klappt aber so nicht. Denn dann verabschiedet sich der Server.
var SelClient : PClient;
i : SmallInt; begin try for I := 0 to Clients.LockList.Count - 1 do begin SelClient := PClient(Clients.LockList.Items[I]); TIdContext(SelClient.Thread).Connection.IOHandler.WriteLn('ShutDown'); end; finally Clients.UnlockList; end; Wie wäre denn hier das richtige Vorgehen? Ich winke schon mal ein ganz bisserl in Richtung Klaus :hi: |
Re: TIdTCPServer : An Gruppe verbundener Clients senden
Könntest Du nicht einfach per UDP einen Broadcast senden?
|
Re: TIdTCPServer : An Gruppe verbundener Clients senden
Hallo Dominik,
Delphi-Quellcode:
type
PClient = ^TClient; TClient = record PeerIP : string[15]; { Cleint IP address } HostName : String[40]; { Hostname } Command : String[100]; WindowHandel : HWND; {Window Handle der Applikation} WindowPosX, WindowPosY, WindowWidth, WindowHeight : SmallInt; Connected : TDateTime; { Time of connect } //Thread : Pointer; { Pointer to thread } Thread : TidContext; end;
Delphi-Quellcode:
wenn Du den Thread Typ auf TidContext änderst, knallst dann immer noch?
var SelClient : PClient;
i : SmallInt; begin try for I := 0 to Clients.LockList.Count - 1 do begin SelClient := PClient(Clients.LockList.Items[I]); SelClient.Thread.Connection.IOHandler.WriteLn('ShutDown'); end; finally Clients.UnlockList; end; Grüße Klaus |
Re: TIdTCPServer : An Gruppe verbundener Clients senden
Moin Klaus,
das geht wohl so auch nicht. Es knallt ja auch nicht wirklich (also ich bekomme keine Exception), aber der Server hängt. Das merkt man daran das sich die Clients nicht mehr sauber disconnecten. |
Re: TIdTCPServer : An Gruppe verbundener Clients senden
Moin !
Zitat:
|
Re: TIdTCPServer : An Gruppe verbundener Clients senden
Hallo Dominik
was machen denn die Clients wenn sie das Kommando "shutdown" bekommen? Oder bekommt der Client das Kommando erst gar nicht. Melden sie sich korrekt ab? Oder bleibt die TCP Verbindung noch stehen (netstat -n)? Grüße Klaus |
Re: TIdTCPServer : An Gruppe verbundener Clients senden
Moin !
Zitat:
Zitat:
Delphi-Quellcode:
Da ich das direkt ausgebe und nichts kommt, kommt es vermutlich erst gar nicht am Client an :(
if not tcpClientTr.IOHandler.InputBufferIsEmpty then
begin s:= tcpClientTr.IOHandler.InputBufferAsString; MainFormClient.IncomingMessages.Lines.Add('Received : ' + S); s:=''; end Zitat:
Zitat:
Ich frage mich aber ob ich in dieser Form überhaupt auf TIdContext zugreifen darf. |
Re: TIdTCPServer : An Gruppe verbundener Clients senden
Hallo Dominik,
ich habe das mal mit einer minimal Konfiguration versucht. Meine ClientList:
Delphi-Quellcode:
So füge ich Clients der Liste hinzu:
clientlist : TObjectList;
procedure TForm1.myOnConnect(aContext: TIdContext);
Delphi-Quellcode:
und so schicke ich eine Meldung an die Clients:
begin
//memo1.lines.add(aContext.Connection.Socket.BoundIP); clientList.Add(aContext); end;
Delphi-Quellcode:
und die kommt auch an.
procedure TForm1.Button1Click(Sender: TObject);
var i: Byte; begin for i:=0 to clientList.Count -1 do (clientList[i] as TidContext).Connection.IOHandler.Write('Halloooooo'); end; Grüße Klaus |
Re: TIdTCPServer : An Gruppe verbundener Clients senden
Liste der Anhänge anzeigen (Anzahl: 1)
Moin Klaus,
ich habe das mal versucht. Aber irgendwie mag mein Client nicht empfangen. Habe mal alles auf eine ganze einfache Demo zusammengestampft und angehängt. Evtl. siehst du den Fehler ja :gruebel: |
Re: TIdTCPServer : An Gruppe verbundener Clients senden
Moin !
Also die Pakete gehen jedenfalls aufs Netz:
Code:
Das ACK Sende ich als Feedback.
0x0000 00 00 00 00 00 01 00 00-00 00 00 02 08 00 45 00 ..............E.
0x0010 00 2D 00 00 00 00 40 06-7C C9 7F 00 00 01 7F 00 .-....@.|É.... 0x0020 00 01 1D FC 08 85 00 00-00 15 00 00 00 69 50 10 ...ü.….......iP. 0x0030 40 00 00 00 00 00 41 43-4B 0D 0A @.....ACK.. Nur werden die Pakete dann nicht empfangen :? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz