Einzelnen Beitrag anzeigen

mjustin

Registriert seit: 14. Apr 2008
3.005 Beiträge
 
Delphi 2009 Professional
 
#7

AW: Indy 10.6.5040 TCPServer Serverschliessen und Client Verbindungen trennen

  Alt 25. Dez 2013, 18:45
Delphi-Quellcode:
procedure TStringServerForm.IdTCPServer1Execute(AContext: TIdContext);
var
  LLine: String;
  ID: Integer;
begin
  if IdTCPServer1.Active then
  begin
    //TIdNotify.NotifyMethod( ShowStartServerdMessage );
    //LLine := AContext.Connection.IOHandler.ReadLn(TIdTextEncoding.Default);
    ID := Integer(AContext.Connection.Socket);
    LLine := AContext.Connection.IOHandler.ReadLn();
    Memo1.Lines.Add(Format('[%.10d]: %s', [ID, LLine]));
    AContext.Connection.IOHandler.WriteLn('OK');
    //TIdNotify.NotifyMethod( StopStartServerdMessage );
  end;

  AContext.Connection.IOHandler.CheckForDisconnect(False, True);
  AContext.Connection.CheckForGracefulDisconnect(False);
end;
Die Execute Methode wird innerhalb eines Serverthreads ausgeführt, daher sind direkte Zugriffe auf VCL Komponenten nicht sauber, da diese nicht threadsicher sind. Anstatt direkt auf Memo1 zuzugreifen kann zum Beispiel mit TThread.Queue das Logging in Memo1 threadsicher erfolgen.

Das "if IdTCPServer1.Active" then ist nicht erforderlich, da der Server den Eventhandler nicht mehr aufrufen wird wenn Active := False ist.
Michael Justin
  Mit Zitat antworten Zitat