AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dienste abfragen!

Ein Thema von Doktor Ruff · begonnen am 11. Okt 2006 · letzter Beitrag vom 13. Okt 2006
Antwort Antwort
Doktor Ruff

Registriert seit: 10. Okt 2006
8 Beiträge
 
#1

Dienste abfragen!

  Alt 11. Okt 2006, 20:59
Sorry wenn das jetzt ne absolute Noob-Frage seien sollte!

Es geht sich um folgendes.

Ich will abfragen ob ein bestimmter Dienst mit einem bestimmten Socket bereits gestartet ist. In meinem speziellen Fall ist es WinStone (ein Java Servlet Container).

Ich hab mir das so vorgestellt:

Delphi-Quellcode:
function isStarted: Boolean;
var
  socket: TClientSocket;
begin
  socket.Create;
  socket.Host := '127.0.0.1';
  socket.Port := 4051;
  socket.Open;
  Result := socket.Active;
end;
Nur kommt jedesmal eine Fehlermeldung "Asynchroner Socket Fehler xyz". Der Fehlercode variiert

Ich hoffe mal ich hab da irgendwie keinen Denkfehler drin oder so. Oder vielleicht gehts ja auch viel einfacher.
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

Re: Dienste abfragen!

  Alt 11. Okt 2006, 22:08
Du könntest mit
Delphi-Quellcode:
try
  socket.Open;
  result := true;
except
  result := false;
  showmessage('Service schon aktiv');
end;
den Fehler abfangen ...

Florian
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
flossinger

Registriert seit: 22. Aug 2005
Ort: südlich der Alpen
109 Beiträge
 
Delphi 5 Standard
 
#3

Re: Dienste abfragen!

  Alt 13. Okt 2006, 13:24
Hallo Doktor,

hast du den code, den du postest wirklich getestet?

  socket.Create; da meckert doch der Compiler?

Deine Funktion wird im Allgemeinen immer false zurückgeben, da bei Beendigung der .open Methode die Eigenschaft .active noch false ist.

Da musst du abwarten ob onconnect oder onerror eintritt. Erst dann hast du Information, die du brauchst.

Aus dem selben Grund gibt die vorgeschlagene Variante mit try except immt true zurück, da bei Beendigung der .open Methode noch keine Exception aufgetreten ist, auch wenn sich später herausstellen sollte, dass die Vebindung nicht zustande kommt. Da wurde etwas vorgeschlagen dass nicht getestet wurde. Beim Testen hätte sich herausgestellt, dass es so nicht funktioniert.

Delphi-Quellcode:
procedure tform1.connect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
  (sender as tclientsocket).tag:=0;
  end;

procedure tform1.sockerr(Sender: TObject;
      Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
      var ErrorCode: Integer);
begin
  form1.memo1.lines.add(inttostr(errorcode));
  (sender as tclientsocket).tag:=errorcode;
  errorcode:=0;
  end;

function test():boolean;
var
  socket: TClientSocket;
begin
  // socket.Create; // Compilerfehler <--<<<
  // socket.create(form1); // EAccessViolation <--<<<
  socket:=tclientsocket.Create(form1); // works <--<<<
  socket.OnError:=form1.sockerr;
  socket.OnConnect:=form1.connect;
  socket.Host := '127.0.0.1';
  socket.Port := 4051;
  socket.Tag := -1;
  socket.Open;
  while (socket.tag = -1) do
    begin
    form1.memo1.lines.add('looping');
    application.ProcessMessages;
    sleep(100);
    end;
  if socket.tag=0 then result:=true
     else result:= false;
  socket.Free;
  end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if test() then memo1.lines.add('* active *')
    else memo1.Lines.add('* not active *');
  end;
Etwas eleganter wäre natürlich eine Variante ohne Warteschleife. Sie ist auch nicht nötig.

Um ohne Warteschleife aus zu kommen, verlegt man die Reaktionen auf das Zustandekommen der Verbindung in die onconnect Prozedur und die Reaktionen auf das Fehlschlagen in die onerror Prozedur.

grüsse,
der flossinger
  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 08:05 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