AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Indy UDP Server als Dienst

Indy UDP Server als Dienst

Ein Thema von Supergr · begonnen am 7. Mai 2021 · letzter Beitrag vom 7. Mai 2021
Antwort Antwort
Supergr

Registriert seit: 8. Feb 2012
12 Beiträge
 
#1

Indy UDP Server als Dienst

  Alt 7. Mai 2021, 10:18
Hallo Zusammen,

ich versuche mich aktuell leider vergeblich an einem Indy UDPServer als Dienst.
Die Dienst Struktur und der Dienst selber laufen.

Leider empfängt der Server nichts.
Wen ich den gleichen Code in einem Programm starte gehts einwandfrei.

Leider finde ich kaum info über die Dienstumgebund die dafür vorgesehen werden muss damit der Dienst auch Zugriff auf das Netzwerk bekommt.

Hier erst mal der Dienst an sich:

Code:
var
  STARITZzeit: TSTARITZzeit;
  Log : TStreamWriter;

implementation

{%CLASSGROUP 'Vcl.Controls.TControl'}

{$R *.dfm}

procedure ServiceController(CtrlCode: DWord); stdcall;
begin
  STARITZzeit.Controller(CtrlCode);
end;

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

procedure TSTARITZzeit.ServiceContinue(Sender: TService; var Continued: Boolean);
begin
   Continued := True;
end;

procedure TSTARITZzeit.ServiceStart(Sender: TService; var Started: Boolean);
begin
   Log := TStreamWriter.Create(TFileStream.Create('c:\log\staritz.log', fmCreate or fmShareDenyWrite));
   started := ConnectServices(log, Zeit_UDP);
end;

procedure TSTARITZzeit.Zeit_UDPUDPRead(AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle);
begin
   Log.WriteLine('UDP Recive!');
   sec_Zeit_UDPUDPRead(Zeit_UDP, XMLZeit, XMLSend, AThread, AData, ABinding);
end;

end.
Der UDP Server liegt auf der Mainform und wird nach "unten" durchgereicht.
Hier der Code der Unit:

Code:
var adsC : TAdsConnection;
    adsM : TAdsTable;
    adsT : TAdsTable;

function ConnectServices(log: TStreamWriter; Zeit_UDP: TIdUDPServer): Boolean;
begin
   result := FALSE;
   ... öffne ein paar Datenbänke...

   // Einmal testen ob der ADS läuft...
   try
      ADSC.IsConnected := TRUE;
   except
      Log.WriteLine('Dictionary conect failed!');
      exit;
   end;
   // Datenbänke testen
   try
      AdsM.Active := TRUE;
   except
      Log.WriteLine('Database Mitar conect failed!');
      exit;
   end;
   try
      AdsT.Active := TRUE;
   except
      Log.WriteLine('Database TimeTable conect failed!');
      exit;
   end;
   // Testen ob der UDP-Port geht...
   try
      Zeit_UDP.ThreadedEvent := TRUE;
      Zeit_UDP.Active := TRUE;
   Except
      Log.WriteLine('UDP conect failed!');
      exit;
   end;
   ADSC.IsConnected := FALSE;
   Log.WriteLine('Staritz aktiv!');
   result := TRUE;
end;

procedure sec_Zeit_UDPUDPRead(Zeit_UDP: TIdUDPServer; XMLZeit: TJvSimpleXML; XMLSend: TJvSimpleXML; AThread: TIdUDPListenerThread; const AData: TIdBytes; ABinding: TIdSocketHandle);
var i : integer;
    sData, sRFID : String;
    rGoOut, rGoIn, rNotFound : Boolean;
    tempElement : TJvSimpleXMLElem;
begin
// Code Empfang und auflösen
    for i:= 0 to length(AData)-1 do
        sData := sData + chr(AData[i]);

    XMLZeit.LoadFromString(sData);
    try
       ...
Ich schreibe mir in einem Log weg was intern passiert.
Dienst kommt bis zum "Staritz aktiv!"
Das heißt der UDP Server arbeitet.
Ports usw. habe ich natürlich schon getestet.

Aber egal wie ich ihn installiere kommt nichts an.

Hat jemand eine Idee?

Threadevent ist im Server auf TRUE!

Gelesen hatte ich schon das deswegen KEINE weiter OnExecute im Dienst benötigt wird.

Für jede Idee wäre ich dankbar!

WIN 10 - Delphi XE7

Danke
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.027 Beiträge
 
Delphi 12 Athens
 
#2

AW: Indy UDP Server als Dienst

  Alt 7. Mai 2021, 11:05
Mit einem TCP-Server haben wir / hat niemand in einem Dienst grundsätzlich keine Probleme.


UDP weiß ich nicht, aber ich wüsste keinen Grund, warum es da anders sein sollte.


[edit]
Stimmt, die Firewall muß es natürlich auch erlauben.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 7. Mai 2021 um 12:58 Uhr)
  Mit Zitat antworten Zitat
Supergr

Registriert seit: 8. Feb 2012
12 Beiträge
 
#3

AW: Indy UDP Server als Dienst

  Alt 7. Mai 2021, 11:51
Danke,

bin alles nochmal durchgegangen! Habe es gefunden

Das Programm mit dem Server und der Unit lief ja ohne Probleme.
Der Dienst nicht.

Windows DomänenFirewall aus, dann geht auch der Dienst!

Warum Windows auf ein und der selben Maschine zwischen Programm und Dienst einen Unterschied macht
erschließt sich mir "noch" nicht... Aber gut!

Fehler ist gefunden!

VG
Stevie
  Mit Zitat antworten Zitat
TiGü
Online

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Indy UDP Server als Dienst

  Alt 7. Mai 2021, 12:01
Systemsteuerung\Alle Systemsteuerungselemente\Windows Defender Firewall\Zugelassene Apps

Da deine Applikation hinzufügen, schon werden alle Ports für TCP und UPD durchgelassen.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:52 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