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