AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi ServerSocket + NT Service ???
Thema durchsuchen
Ansicht
Themen-Optionen

ServerSocket + NT Service ???

Ein Thema von Piro · begonnen am 11. Aug 2008 · letzter Beitrag vom 12. Aug 2008
Antwort Antwort
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#1

ServerSocket + NT Service ???

  Alt 11. Aug 2008, 13:22
Moin,

ich habe eine Client/Server Anwendung. Sie funktioniert auch wunderbar. Jetzt möchte ich aber den Server als Dienst laufen lassen. Ich habe mir einen Dienst erstellt mit allen notwendigen Eigenschaften wie in der Anwendung.

Leider wird jetzt die Verbindung nicht aufgebaut und ich verstehe nicht warum. Ich hoffe ihr wisst Rat.

Mein Service für den Server:
Delphi-Quellcode:
unit uMain;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs,
  ExtCtrls, ScktComp;

type
  TKECServerMonitoring = class(TService)
    Timer: TTimer;
    procedure ServiceExecute(Sender: TService);
    procedure ServiceAfterInstall(Sender: TService);
    procedure ServiceBeforeUninstall(Sender: TService);
    procedure ServiceCreate(Sender: TObject);
    procedure ServiceStart(Sender: TService; var Started: Boolean);
    procedure ServiceStop(Sender: TService; var Stopped: Boolean);
    procedure TimerTimer(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    Client: TClientSocket;
    Server: TServerSocket;
    function GetServiceController: TServiceController; override;
  end;

var
  KECServerMonitoring: TKECServerMonitoring;

implementation

{$R *.DFM}

{##############################################################################}
{######################                        ################################}
{######################      Main Program      ################################}
{######################                        ################################}
{##############################################################################}
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  KECServerMonitoring.Controller(CtrlCode);
end;

function TKECServerMonitoring.GetServiceController: TServiceController;
begin
  Result := ServiceController;
end;

procedure TKECServerMonitoring.ServiceAfterInstall(Sender: TService);
begin
//
end;

procedure TKECServerMonitoring.ServiceBeforeUninstall(Sender: TService);
begin
 Server.Active := FALSE;
end;

procedure TKECServerMonitoring.ServiceCreate(Sender: TObject);
begin
 //Initialisierung des Objekts (ältere Delphi-Versionen)
 Server := TServerSocket.Create(Self);

 // Initial Server Verbindung damit der Client Verbindung aufnehmen kann
 Server.Port := 29979;
 Server.Active := TRUE;
end;

procedure TKECServerMonitoring.ServiceStart(Sender: TService; var Started: Boolean);
begin
 Timer.Enabled := TRUE;
end;

procedure TKECServerMonitoring.ServiceExecute(Sender: TService);
begin
 while not Terminated do
 begin
   ServiceThread.ProcessRequests(TRUE); // CPU Last ist damit nicht 100%
 end;
end;

procedure TKECServerMonitoring.ServiceStop(Sender: TService; var Stopped: Boolean);
begin
  Timer.Enabled := FALSE;
end;

procedure TKECServerMonitoring.TimerTimer(Sender: TObject);
begin
 if Server.Active = FALSE then
 begin
   Server.Port := 29979;
   Server.Active := TRUE;
 end;
end;

end.
Meine Client Unit:
Delphi-Quellcode:
...
procedure Tfrm_main.FormCreate(Sender: TObject);
begin
 //Initialisierung des Objekts (ältere Delphi-Versionen)
 Client := TClientSocket.Create(Self);

 Client.OnError := ClientError;
 Client.OnConnect := ClientConnect;
end;

procedure Tfrm_main.sbtn_connectClick(Sender: TObject);
begin
 if edt_server.Text <> 'then
 begin
   try
     Client.Port := 29979;
     // Remote Computer mit dem die Verbindung aufgebaut werden soll
     Client.Host:= edt_server.Text;
     Client.Open;
   except
     //Im Fehlerfall wieder freigeben (ältere Versionen)
     Client.Free;
     end;
 end
 else
   MessageDlg('IP / Name des Remote Computer eingeben.',mtInformation,[mbOK],0);
end;

procedure Tfrm_main.ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
begin
 Memo.Lines.Add(FormatDateTime('hh:mm:ss',now) + ' : Verbunden mit '+edt_server.Text);
end;

procedure Tfrm_main.ClientError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
 if ErrorCode > 0 then
 begin
   Client.Close;
   Memo.Lines.Add(FormatDateTime('hh:mm:ss',now) + ' : Verbindung mit '+edt_server.Text + ' fehlgeschlagen');
   ErrorCode := 0;
 end;
end;
...
  Mit Zitat antworten Zitat
Benutzerbild von Piro
Piro

Registriert seit: 14. Jul 2003
Ort: Flintbek
810 Beiträge
 
Delphi XE2 Professional
 
#2

Re: ServerSocket + NT Service ???

  Alt 12. Aug 2008, 08:50
Hat sich erledigt. Irgendetwas war da faul. Jetzt klappt es.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 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