Jak napisać serwer w konsoli lub jako proces?

0

Witam wszystkich. Mam problem z którym nie wiem jak sobie poradzić, pisze aplikacje - serwer, używam do tego komponentu INDY (wersje GUI mam gotową)
jednak wolałbym napisac serwer jako proces lib aplikcaje konsolową, gdyż nie che niepotrzebnie zabierac pamięci systemu a poza tym chce przenieś później projekt do kylixa.
Jednak jak pisze jako aplikacja konsolwa to z klienta moge tylko połączyć się z serwerem ale żadnych komunikatów nie moge wysyłać i odbierać serwera.
Próbowałem nawet wstawic INDY do wątku ale to nie pomaga.
Oto przykładowy kodzik jaki zastosowałem:

program Project1;

{$APPTYPE CONSOLE}

uses
  Classes,IdBaseComponent, IdComponent, IdTCPServer, IdTCPConnection;

type
  TServ = class(TThread)
  private
    IdTCP: TIdTCPServer;
    procedure IdTCPConnect(AThread: TIdPeerThread);
    procedure IdTCPExecute(AThread: TIdPeerThread);
  protected
    procedure Execute; override;
  public
    constructor Create;
  end;

var
  Serv: TServ;


procedure TServ.IdTCPConnect(AThread: TIdPeerThread);
begin
  AThread.Connection.WriteLn('Witam na serwerze !!!');
end;

procedure TServ.IdTCPExecute(AThread: TIdPeerThread);
var
  msg : String;
begin
  with AThread.Connection do
        begin
          if Connected then
                begin
                   msg := ReadLn();
                   if msg <> '' then
                        begin
                          msg := '@SERVER:REQUEST['+msg+']';
                          WriteLn(msg);
                        end;
                end;
        end;
end;


constructor TServ.Create;
begin
  IdTCP := TIdTCPServer.Create(nil);
  IdTCP.DefaultPort := 1800;
  FreeOnTerminate := True;
  inherited Create(False);
end;


procedure TServ.Execute;
begin
  IdTCP.Active := TRUE;
end;


var
  command : String;
begin
  Serv := TServ.Create;
  Serv.Execute;
  Writeln;
  repeat
    Write('Serwer: '); Readln(command);
  until (command = 'quit');
  Serv.Free;
end.

Proszę o jakieś ort! lub częśc kodu jaki mógłbym zastosować.

To ma byś aplikcaja pod Windowsa i pod Linuxa

0

Indy to VCL, wiec raczej bedziesz musial skorzystac z Forms i TApplication i <ort>zapentlic </ort>program (while true do ;).

0

While true do to nie jest najlepszy pomysł :). Częst się niemiło kończy (jakiś "Program wykonał..." albo coś :) ). Ale do aplikacji Win/Lin sugeruję Lazarusa - coprawda nie jest to jeszcze ideał (niektóre rzeczy jeszcze nie działają), ale pozwala bez zmiany nawet jednego znaczka w kodzie skompilować program pod innym systemem (Windows, Linux, MacOS i jeszcze zdaje się parę innych).

0

Ale komponent INDY również znajduje się pod Kylixem, i jest on VCL i CLX wiec nie ma tutaj zanczenia, czy użyje Lazarusa czy Delphi czy Kylixa

0

Tyle tylko, że żeby przenieść kod z Delphi do Kylix'a musisz troszkę pokombinować. A w Lazarusie otwierasz ten sam projekt w innym systemie, kompilujesz i już (albo nawet w tym samym, jeśli się nie mylę, to w opcjach kompilatora możesz wybrać, pod jaki system ma być utworzony plik wykonywalny, ale tutaj pewności nie mam).

1 użytkowników online, w tym zalogowanych: 0, gości: 1