AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TIdTCPServer : An Gruppe verbundener Clients senden
Thema durchsuchen
Ansicht
Themen-Optionen

TIdTCPServer : An Gruppe verbundener Clients senden

Ein Thema von moelski · begonnen am 25. Sep 2009 · letzter Beitrag vom 25. Sep 2009
Antwort Antwort
Seite 1 von 2  1 2      
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#1

TIdTCPServer : An Gruppe verbundener Clients senden

  Alt 25. Sep 2009, 12:04
Moin !

Habe da einen TIdTCPServer wo sich Client connecten können:
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 }
  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 *)
Soweit so gut. Nun möchte ich an alle conecteten Client eine Nachricht senden. Ich habe folgendes probiert:
Delphi-Quellcode:
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;
Das klappt aber so nicht. Denn dann verabschiedet sich der Server.

Wie wäre denn hier das richtige Vorgehen?
Ich winke schon mal ein ganz bisserl in Richtung Klaus
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.622 Beiträge
 
Delphi 12 Athens
 
#2

Re: TIdTCPServer : An Gruppe verbundener Clients senden

  Alt 25. Sep 2009, 12:10
Könntest Du nicht einfach per UDP einen Broadcast senden?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: TIdTCPServer : An Gruppe verbundener Clients senden

  Alt 25. Sep 2009, 12:19
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:
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;
wenn Du den Thread Typ auf TidContext änderst, knallst dann immer noch?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#4

Re: TIdTCPServer : An Gruppe verbundener Clients senden

  Alt 25. Sep 2009, 12:27
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.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#5

Re: TIdTCPServer : An Gruppe verbundener Clients senden

  Alt 25. Sep 2009, 12:28
Moin !

Zitat:
Könntest Du nicht einfach per UDP einen Broadcast senden?
Klar ginge das. Aber da ich doch eh zu jedem Client eine Verbindung halte sollte das doch auch gerichtet über TCP gehen
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: TIdTCPServer : An Gruppe verbundener Clients senden

  Alt 25. Sep 2009, 12:45
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
Klaus
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#7

Re: TIdTCPServer : An Gruppe verbundener Clients senden

  Alt 25. Sep 2009, 12:55
Moin !

Zitat:
was machen denn die Clients wenn sie das Kommando "shutdown" bekommen?
Nichts. Es scheint so als kämen die dort niemals an.

Zitat:
Oder bekommt der Client das Kommando erst gar nicht.
Delphi-Quellcode:
      if not tcpClientTr.IOHandler.InputBufferIsEmpty then
        begin
          s:= tcpClientTr.IOHandler.InputBufferAsString;
          MainFormClient.IncomingMessages.Lines.Add('Received : ' + S);
          s:='';
        end
Da ich das direkt ausgebe und nichts kommt, kommt es vermutlich erst gar nicht am Client an

Zitat:
Melden sie sich korrekt ab?
Das Disconnect vom Server klappt - kann man gut mit TCPView beobachten.

Zitat:
Oder bleibt die TCP Verbindung noch stehen (netstat -n)?
Nein. Die ist nach dem Disconnect auch weg.

Ich frage mich aber ob ich in dieser Form überhaupt auf TIdContext zugreifen darf.
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.768 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: TIdTCPServer : An Gruppe verbundener Clients senden

  Alt 25. Sep 2009, 13:18
Hallo Dominik,

ich habe das mal mit einer minimal Konfiguration versucht.

Meine ClientList:

clientlist : TObjectList; So füge ich Clients der Liste hinzu:

procedure TForm1.myOnConnect(aContext: TIdContext);
Delphi-Quellcode:
begin
  //memo1.lines.add(aContext.Connection.Socket.BoundIP);
  clientList.Add(aContext);
end;
und so schicke ich eine Meldung an die Clients:
Delphi-Quellcode:
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;
und die kommt auch an.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#9

Re: TIdTCPServer : An Gruppe verbundener Clients senden

  Alt 25. Sep 2009, 13:50
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
Angehängte Dateien
Dateityp: zip motherchild_690.zip (46,0 KB, 13x aufgerufen)
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
moelski

Registriert seit: 31. Jul 2004
1.110 Beiträge
 
Delphi 2010 Professional
 
#10

Re: TIdTCPServer : An Gruppe verbundener Clients senden

  Alt 25. Sep 2009, 14:48
Moin !

Also die Pakete gehen jedenfalls aufs Netz:
Code:
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..
Das ACK Sende ich als Feedback.

Nur werden die Pakete dann nicht empfangen
Dominik Schmidt
Greetz Dominik

I love Delphi 2007/2010
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz