TServerSocket Console

Tags:    delphi

Kan man bruge TServerSocket komponentet i et Console program? Hvordan?



6 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Kan man bruge TServerSocket komponentet i et Console program? Hvordan?


Jada. Jeg ville lave en klasse indeholdende TServerSocket komponenten + event handlers og nogle properties til at styre den med fra hovedprogrammet. Noget i stil med nedenstående burde man kunne arbejde videre med.

<pre>
program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils, ScktComp;

type

TDinKlasse = class
private
SS: TServerSocket;
procedure OnAccept(Sender: TObject; Socket: TCustomWinSocket);
procedure OnListen(Sender: TObject; Socket: TCustomWinSocket);
procedure SetActiveState(Active: Boolean);
function GetActiveState: Boolean;
public
constructor Create;
destructor Destroy; override;
property Active: Boolean read GetActiveState Write SetActiveState;
end;



{ TDinKlasse }

constructor TDinKlasse.Create;
begin
SS := TServerSocket.Create(nil);
SS.OnAccept := OnAccept;
SS.OnListen := OnListen;
end;

destructor TDinKlasse.Destroy;
begin
//lav evt. noget kode til at lukke alle forbindelserne
SS.Free;
inherited;
end;

function TDinKlasse.GetActiveState: Boolean;
begin
Result := SS.Active;
end;

procedure TDinKlasse.SetActiveState(Active: Boolean);
begin
SS.Active := Active;
end;

procedure TDinKlasse.OnAccept(Sender: TObject; Socket: TCustomWinSocket);
begin

end;

procedure TDinKlasse.OnListen(Sender: TObject; Socket: TCustomWinSocket);
begin

end;



var
DinKlasse: TDinKlasse;


begin
DinKlasse := TDinKlasse.Create;
try
//kode som f.eks. DinKlasse.Active := True; som så starter socket'en
finally
DinKlasse.Free;
end;
end.

</pre>



Programmet lukker når starter det, efter jeg satte koden ind



Programmet lukker når starter det, efter jeg satte koden ind


Ja, det eneste det gør er at oprette en instans af TDinKlasse og nedlægger det igen med det samme. Du må selv putte kode ind i try finally blokken og lave nogle event handlers...



Kan man bruge TServerSocket komponentet i et Console program? Hvordan?

Jada. Jeg ville lave en klasse indeholdende TServerSocket komponenten + event handlers og nogle properties til at styre den med fra hovedprogrammet. Noget i stil med nedenstående burde man kunne arbejde videre med.

<pre>
var
DinKlasse: TDinKlasse;


begin
DinKlasse := TDinKlasse.Create;
try
//kode som f.eks. DinKlasse.Active := True; som så starter socket'en
finally
DinKlasse.Free;
end;
end.

</pre>


Giver dette ikke problemer da dit program vil afslutte med det samme?
Jeg tager måske fejl (har aldrig lavet en console app) men jeg tror altså at det ville være smartere at lave "DinKlasse" i en tråd.

f.eks. sådan her:
Fold kodeboks ind/udKode 


prøv evt. at connect'e vha telnet (telnet localhos 3003) og tryk en tast (du skulle gerne se en tekst komme frem når du har connected og når du sender en karakter).


Håber det hjælper.
Michael.




Giver dette ikke problemer da dit program vil afslutte med det samme?
Jeg tager måske fejl (har aldrig lavet en console app) men jeg tror altså at det ville være smartere at lave "DinKlasse" i en tråd.


<pre>
.....
begin
DinKlasse := TDinKlasse.Create;
try
//Gør ting med DinKlasse
Writeln('Press <enter> to quit');
Readln;
finally
DinKlasse.Free;
end;
end;
</pre>

Er det bedre? :) Jeg smækkede nu bare lige et hurtigt eksempel sammen for at vise en måde hvorpå det kan gøres - det var ikke meningen at det rent faktisk skulle kunne andet end compile.




Giver dette ikke problemer da dit program vil afslutte med det samme?
Jeg tager måske fejl (har aldrig lavet en console app) men jeg tror altså at det ville være smartere at lave "DinKlasse" i en tråd.


<pre>
.....
begin
DinKlasse := TDinKlasse.Create;
try
//Gør ting med DinKlasse
Writeln('Press <enter> to quit');
Readln;
finally
DinKlasse.Free;
end;
end;
</pre>

Er det bedre? :) Jeg smækkede nu bare lige et hurtigt eksempel sammen for at vise en måde hvorpå det kan gøres - det var ikke meningen at det rent faktisk skulle kunne andet end compile.

hehe MEGET :)

Det jeg var lidt i tvivl om var om Delphi implementere en "ProcessMessages" funktion i en Console app. For hvis den ikke gør, så vil din kode ikke virke da der ikke bliver "læst" nogle beskeder fra Console'ens besked kø. Hvilket igen betyder at TServerSocket ikke vil fungere.
Men som sagt så har jeg ikke prøvet det men det skulle da være nemt at teste.




t