AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi TServerSocket Events werden nicht ausgeführt
Thema durchsuchen
Ansicht
Themen-Optionen

TServerSocket Events werden nicht ausgeführt

Ein Thema von manuel · begonnen am 24. Nov 2004 · letzter Beitrag vom 26. Nov 2004
Antwort Antwort
manuel

Registriert seit: 17. Sep 2003
Ort: MainBootRecord
72 Beiträge
 
Delphi 4 Client/Server
 
#1

TServerSocket Events werden nicht ausgeführt

  Alt 24. Nov 2004, 20:54
Hi Leute,

ich schreibe einen Windows-Service der nach einer eingehenden TCP-Verbindung Daten aus einer Datenbank holt und zurück zum Client sendet.

Und da liegt das Problem:
Der Client kann zwar verbinden, aber die TServerSocket Eventroutinen scheinen nicht aufgerufen zu werden

Noch ein paar Details:
Das Programm lief vorher als normales Anwender-Programm einwandfrei, dann habe ich versucht es in einen Service (threaded) zu konvertieren.

Der Serice erstellt einen Thread, welcher sich um die eigentliche Aufgabenbearbeitung kümmert.
Hier mal der Code für den Thread:


Delphi-Quellcode:
unit NTServiceThread;

interface

uses
  Windows, Messages, SysUtils, Classes,CheckSum, Help, AMC_Registry, Db, ZMySqlQuery,
  ZQuery, ZTransact, ZMySqlTr, ZConnect, ZMySqlCon, Log,ScktComp,Forms, Dialogs;


      type
  CustomRec = record
    StartTag: integer;
    MSG_1: String[255];
    MSG_2: String[255];
    CheckSum: Integer;
    EndTag: integer;
end;
   
type
  TNTServiceThread = Class(TThread)
  private
    { Private declarations } 
  Public
    { Public declarations } 
    Interval : Integer;
    SrvSock: TServerSocket; // der Server-Socket
    serverthread:TServerClientThread ;
    ReceiveRec: CustomRec ;
    SendRec : CustomRec ;
    Error_Counter:Integer;
    cstemp:String; //nimmt Einmal-Code auf
    help:THelp;
    logfile:TLog;
    registry: AMCRegistry;

    procedure Listening(Sender: TObject; Socket: TCustomWinSocket);
    procedure Connecting(Sender: TObject; Socket: TCustomWinSocket);
    procedure DisConnecting(Sender: TObject; Socket: TCustomWinSocket);
    procedure Reading(Sender: TObject; Socket: TCustomWinSocket);
    procedure IsError(Sender: TObject; Socket: TCustomWinSocket;
                     ErrorEvent: TErrorEvent; var ErrorCode: Integer);



    Procedure Execute; Override;
  Published
    { Published declarations } 
  End;

implementation

{ TNTServiceThread }
uses unit1;

procedure TNTServiceThread.Execute;
Var
   TimeOut : Integer;
begin
     { Do NOT free on termination - The Serivce frees the Thread } 
     FreeOnTerminate := False;

     { Set Interval } 
     TimeOut := Interval * 4;



help:=Thelp.Create;
registry:=AMCregistry.Create;
logfile:=TLog.create(true);
logfile.OpenLogFile;

 SrvSock:=TServerSocket.Create(unit1.DaVe_Licencing.Owner);
 logfile.WriteEntry('Create TServerSocket');
 SrvSock.Port:=registry.getPort;
 logfile.WriteEntry('Get Port');

 SrvSock.ServerType:=stNonBlocking;
 logfile.WriteEntry('Servertype stNonBlocking');
 SrvSock.OnListen:=Listening;
 SrvSock.OnClientConnect:=Connecting;
 SrvSock.OnClientDisConnect:=DisConnecting;
 SrvSock.OnClientRead:=Reading;
 SrvSock.Open;
 logfile.WriteEntry('ServSock.Open');
 registry.Free;
 beep;


     { Main Loop } 
     Try
        While Not Terminated do
        Begin
             { Decrement timeout } 
             Dec( TimeOut );

             If (TimeOut=0) then
             Begin
                  { Reset timer } 
                  TimeOut := Interval * 4;

                  { DoWork }








             End;
             { Wait 1/4th of a second } 
             Sleep(250);
        End;
     Except
        On E:Exception do ; // TODO: Exception logging...
     End;
     { Terminate the Thread - This signals Terminated=True }
     logfile.CloseLogFile;
     Terminate;
end;



procedure TNTServiceThread.IsError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer);
begin
 Socket.Close;
 logfile.WriteEntry('Event: IsError - Socket.close');
 ErrorCode:=0;
end;

procedure TNTServiceThread.DisConnecting(Sender: TObject; Socket: TCustomWinSocket);
begin

        logfile.WriteEntry('DisConnected: ' + Socket.RemoteHost+' '+Socket.RemoteAddress);
        beep;
end;


procedure TNTServiceThread.Connecting(Sender: TObject; Socket: TCustomWinSocket);


begin

 Socket.OnErrorEvent:=IsError;
 //Memo1.Lines.add('Connected to ' + Socket.RemoteHost+' '+Socket.RemoteAddress);
 logfile.WriteEntry('Connected to ' + Socket.RemoteHost+' '+Socket.RemoteAddress);
  beep;
end;

procedure TNTServiceThread.Listening(Sender: TObject; Socket: TCustomWinSocket);
begin

      // TODO
end;


procedure TNTServiceThread.Reading(Sender: TObject; Socket: TCustomWinSocket);
var Licence:String;
begin
showMessage('#Incoming');
Socket.ReceiveBuf (ReceiveRec,sizeof(ReceiveRec));
logfile.WriteEntry(ReceiveRec.MSG_1);
end;

end.

Gibt es eigentlich eine Sinnvolle Möglichkeit (ausser loggen in txt-files) Services zu debuggen?


Gruß

Manuel
sometimes I feel diagonally parked in a parallel universe
  Mit Zitat antworten Zitat
manuel

Registriert seit: 17. Sep 2003
Ort: MainBootRecord
72 Beiträge
 
Delphi 4 Client/Server
 
#2

Re: TServerSocket Events werden nicht ausgeführt

  Alt 26. Nov 2004, 11:35
Hat denn keiner ne Idee?

sometimes I feel diagonally parked in a parallel universe
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#3

Re: TServerSocket Events werden nicht ausgeführt

  Alt 26. Nov 2004, 18:01
Moin!

Ich verstehe nicht ganz, warum du das ganze threaded machen musst, da schliesslich der TServerSocket intern schon threaded arbeitet und du somit ein Thread im Thread bedienst was dann ja wiederrum höher Ansprüche an das synchronisieren und verteilen legt. Daher meine Idee dazu: Nimm den Thread im Service raus und mach es direkt.

MfG
Muetze1
  Mit Zitat antworten Zitat
manuel

Registriert seit: 17. Sep 2003
Ort: MainBootRecord
72 Beiträge
 
Delphi 4 Client/Server
 
#4

Re: TServerSocket Events werden nicht ausgeführt

  Alt 26. Nov 2004, 22:00
Hab ich mir auch schon überlegt.
Aber ich hab auf verschiedenen Seiten gelesen, man sollte es so machen, da es besser für die verwaltung der Dienste wäre.

Aber ich werds wohl rausnehmen, wenn ich den Fehler net finde...

Gruß

Manuel
sometimes I feel diagonally parked in a parallel universe
  Mit Zitat antworten Zitat
Benutzerbild von Sprint
Sprint

Registriert seit: 18. Aug 2004
Ort: Edewecht
712 Beiträge
 
Delphi 5 Professional
 
#5

Re: TServerSocket Events werden nicht ausgeführt

  Alt 26. Nov 2004, 22:13
Zitat von manuel:
Gibt es eigentlich eine Sinnvolle Möglichkeit (ausser loggen in txt-files) Services zu debuggen?
Als normale Anwendung schreiben. Wenn's dann BugFrei ist zum Dienst umschreiben.
Ciao, Sprint.

"I don't know what I am doing, but I am sure I am having fun!"
  Mit Zitat antworten Zitat
manuel

Registriert seit: 17. Sep 2003
Ort: MainBootRecord
72 Beiträge
 
Delphi 4 Client/Server
 
#6

Re: TServerSocket Events werden nicht ausgeführt

  Alt 26. Nov 2004, 23:41
Zitat:
Als normale Anwendung schreiben. Wenn's dann BugFrei ist zum Dienst umschreiben.
Hab ich gemacht....
Hatte allerdings Probleme mit dem Beenden des Services und wusste nicht wieso...
Hatte
Code:
ServiceThread.ProcessRequests( False );
vergessen

Gruß

Manuel
sometimes I feel diagonally parked in a parallel universe
  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 15:18 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