
Program ServiceNT;
Uses
svcmgr,
EssaiService in 'EssaiService.pas' {Service1:
TService};
{$R *.RES}
begin
Application.Initialize;
Application.Title := 'ServerSocket';
Application.CreateForm(TService1, Service1);
Application.Run;
End.
|
unit EssaiService;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs, ScktComp;
TService1 = class(TService)
ServerSocket1: TServerSocket;
procedure ServiceStart(Sender: TService; var Started: Boolean);
procedure ServiceShutdown(Sender: TService);
procedure ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
procedure ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
Private
{ Déclarations privées }
Public
{ Déclarations publiques }
function GetServiceController: TServiceController; override;
end;
var
Service1: TService1;
port: TCustomWinSocket;
implementation
{$R *.DFM}
{******************************************************************************}
procedure ServiceController(CtrlCode: DWord); stdcall;
begin
Service1.Controller(CtrlCode);
end;
{******************************************************************************}
function TService1.GetServiceController: TServiceController;
begin
Result := ServiceController;
end;
{******************************************************************************}
{Sur Démarrage du Service}
procedure TService1.ServiceStart(Sender: TService; var Started: Boolean);
begin
ServerSocket1.Active:=False;
ServerSocket1.Port:=8500;
ServerSocket1.Active:=True;
Started:=True;
end;
{******************************************************************************}
{Sur Arrêt du service}
procedure TService1.ServiceShutdown(Sender: TService);
begin
ServerSocket1.Active:=False;
end;
{******************************************************************************}
{Sur Connection du client.}
procedure TService1.ServerSocket1ClientConnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
{Affectation du port client}
port:=Socket;
end;
{******************************************************************************}
{Sur lecture du Client}
procedure TService1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
strReceiveText: String;
begin
Socket:=port;
strReceiveText:=Socket.ReceiveText;
if (Length(Trim(strReceiveText))<>0) then
begin
{envoi de texte vers le port client}
port.SendText('Message Reçu : '+strReceiveText);
{Fermeture du port client}
port.close;
end;
end;
{******************************************************************************}
end.
|
Object Service1: TService1
OldCreateOrder = False
DisplayName = 'Essai d''un Service NT (Ecoute du port 8500)'
StartType = stManual
OnShutdown = ServiceShutdown
OnStart = ServiceStart
Left = 189
Top = 104
Height = 375
Width = 544
Object ServerSocket1: TserverSocket
Active = False
Port = 8500
Service = 'testBenoit'
ServerType = stNonBlocking
OnClientConnect = ServerSocket1ClientConnect
OnClientRead = ServerSocket1ClientRead
Left = 32
Top = 16
End
End
|
La propriété Service de l'objet TserverSocket est initialisée à 'testBenoit'. Cette dernière revêt une importance capitale pour la suite. En effet, c’est ce nom qui doit figurer dans le fichier services de Windows NT.
Il nous reste maintenant quatre étapes avant le démarrage du service:
testBenoit 8500/tcp |
# Copyright (c) 1993-1995 Microsoft Corp. # # This file contains port numbers for well-known services as defined by # RFC 1060 (Assigned Numbers). # # Format: # # <service name> <port number>/<protocol> [aliases...] [#<comment>] # echo 7/tcp echo 7/udp discard 9/tcp sink null discard 9/udp sink null systat 11/tcp systat 11/tcp users daytime 13/tcp daytime 13/udp netstat 15/tcp testBenoit 8500/tcp |
| <chemin du fichier ServiceNT.exe> /INSTALL |
Si tout s'est bien déroulé il ne vous reste plus qu'à démarrer le service.
Par la suite, si vous désirez désinstaller ce service, il vous suffira de l'arrêter et de saisir la ligne de commande suivante :| <chemin du fichier ServiceNT.exe> /UNINSTALL |
Le programme en REBOL permet tout d’abord
|
REBOL [] a: open tcp://<local host>:8500 insert a "hello" print copy a close a |