Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi idTCPServer in Konsole: Konsole soll nicht schließen (https://www.delphipraxis.net/21225-idtcpserver-konsole-konsole-soll-nicht-schliessen.html)

Chris1986 29. Apr 2004 17:04


idTCPServer in Konsole: Konsole soll nicht schließen
 
Hallo,
ich versuche gerade einen simplen Chat-Server in einer Konsolen-Anwendung aufzubauen. Wie ich alle Komponenten erstelle und auch mit Ereignissen verbinden, weiß ich. Allerdings beendet sich das Programm sofort, nachdem es alle Befehle ausgeführt hat. Was muss ich tun, damit das Konsolenfenster geöffnet bleibt, der idTCPServer weiter läuft und ich zwischen durch noch mit writln Texte ausgeben kann (z.B. im Onconnect-Ereignis)?

Danke für eure Hilfe

MfG
Christian

shmia 29. Apr 2004 17:19

Re: idTCPServer in Konsole: Konsole soll nicht schließen
 
Zitat:

Zitat von Chris1986
Was muss ich tun, damit das Konsolenfenster geöffnet bleibt, der idTCPServer weiter läuft und ich zwischen durch noch mit writln Texte ausgeben kann (z.B. im Onconnect-Ereignis)?

Du musst die Konsolenanwendung in einer Schleife aufhalten. :wink:
Delphi-Quellcode:
var
   ShutDownServer : boolean; // Globale Variable
begin
   ShutDownServer := False;

   // ...
   while not (ShutDownServer or Eof(Input)) do Sleep(50);
   // ...
end;
end.
Wenn du Strg-C drückst oder die Variable ShutDownServer auf True setzt,
endet die Konsolenanwendung.

Chris1986 29. Apr 2004 18:07

Re: idTCPServer in Konsole: Konsole soll nicht schließen
 
ahh, danke

Chris1986 29. Apr 2004 19:03

Re: idTCPServer in Konsole: Konsole soll nicht schließen
 
Noch ne Frage:
bei
Delphi-Quellcode:
writeln('Hallo DP . . .')
schließt sich die Konsole nicht. Wenn ich
Delphi-Quellcode:
Console.TCPServer.active := true
aufrufe, wird die Konsole sofort geschlossen. Woran liegt das?

EDIT: Der Quelltext:

Delphi-Quellcode:
type
  TConsole = class(TObject)
    TCPServer: TIdTCPServer;
   constructor create;
  private
    procedure ServerConnect(AThread: TidPeerThread);
  public
  end;

constructor TConsole.Create;
begin
inherited Create;
  TCPserver := TIdTCPServer.Create(TCPServer);
  with TCPServer do
  begin
    OnConnect := ServerConnect;
  end;
end;

var
  Console: TConsole;
  ShutDownServer: boolean;

//Server Events-----------------------------------------------------------------
procedure TConsole.ServerConnect(AThread: TidPeerThread);
begin
   with AThread as TIdPeerThread do
   begin
      // hier kannst du z.B. den Namen und checked abfragen...
      writeln(AThread.Connection.LocalName);
   end;
end;
//Ende: Server Events-----------------------------------------------------------

begin
  writeln('Herzlich Willkommen.');
  Console.TCPServer.DefaultPort := 300;
  Console.TCPServer.active := true;// <= Konsolenfenster schließt sich im Anschluss
  while not (ShutDownServer{ or Eof(Input)}) do Sleep(50);
end.
Danke für eure Hilfe

Gruß
Christian

Chris1986 29. Apr 2004 19:16

Re: idTCPServer in Konsole: Konsole soll nicht schließen
 
Zitat:

Zitat von Chris1986
Noch ne Frage:
bei
Delphi-Quellcode:
writeln('Herzlich Willkommen')
schließt sich die Konsole nicht. Wenn ich
Delphi-Quellcode:
Console.TCPServer.active := true
aufrufe, wird die Konsole sofort geschlossen. Woran liegt das?

EDIT: Der Quelltext:

Delphi-Quellcode:
type
  TConsole = class(TObject)
    TCPServer: TIdTCPServer;
   constructor create;
  private
    procedure ServerConnect(AThread: TidPeerThread);
  public
  end;

constructor TConsole.Create;
begin
inherited Create;
  TCPserver := TIdTCPServer.Create(TCPServer);
  with TCPServer do
  begin
    OnConnect := ServerConnect;
  end;
end;

var
  Console: TConsole;
  ShutDownServer: boolean;

//Server Events-----------------------------------------------------------------
procedure TConsole.ServerConnect(AThread: TidPeerThread);
begin
   with AThread as TIdPeerThread do
   begin
      // hier kannst du z.B. den Namen und checked abfragen...
      writeln(AThread.Connection.LocalName);
   end;
end;
//Ende: Server Events-----------------------------------------------------------

begin
  ShutdownServer := false;
  writeln('Herzlich Willkommen.');
  Console.TCPServer.DefaultPort := 300;
  Console.TCPServer.active := true;// <= Konsolenfenster schließt sich im Anschluss
  while not ShutDownServer do Sleep(50);
end.
Danke für eure Hilfe

Gruß
Christian



Alle Zeitangaben in WEZ +1. Es ist jetzt 12:02 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