![]() |
Prüfen, ob Port bereits belegt ist
Servus,
ich arbeite zurzeit an einem Webserver (mit den Indy Komponenten). Dieser hat den Port 80. Falls dieser Port schon belegt ist, soll der Port um eins erhört werden. Dann wird wieder überprüft, ob er belegt ist, usw. Jedoch wird bei meinem Code immer eine Exception ausgelöst, selbst wenn die weiteren Ports frei sind. Nur wenn der erste Port (in dem Fall der Port 80) frei ist, läuft der Webserver. Hier der Code:
Delphi-Quellcode:
Könnt ihr helfen?
function StartWebserver : Boolean;
begin Result := false; try frmMain.Webserver.Active := true; Result := true; except on EIdCouldNotBindSocket do begin // Ausfuehren, wenn Port belegt ist frmMain.Webserver.Active := false; Exit; end; end; end; procedure TfrmMain.FormCreate(Sender: TObject); begin ... Webserver.DefaultPort := 80; while StartWebserver = false do begin Webserver.DefaultPort := Webserver.DefaultPort +1; end; ... end; |
Re: Prüfen, ob Port bereits belegt ist
Ich weiß es nicht...aber vielleicht hängt es damit zusammen dass Webserver normal immer auf den Port 80 hören, denn das ist soviel ich weiß ja auch in den Browsern einprogrammier,oder?
Falls der Webserver nämlich nicht auf dem Port 80 läuft, so muss hinter der Adresse der Port hinzugefügt werden (Beispiel: ![]() |
Re: Prüfen, ob Port bereits belegt ist
Das Problem ist, dass der Webserver garnicht gestartet wird, falls der erste Port - also 80 - belegt ist und nach oben gezählt wird. Falls jedoch der Port, der als erstes angegeben wird, nicht belegt ist, startet er ohne Probleme.
Könnt ihr helfen? :? |
Re: Prüfen, ob Port bereits belegt ist
Hai cYaONE,
setze mal Result := False in deinen exception Block. |
Re: Prüfen, ob Port bereits belegt ist
Vielen Dank, es nützt aber leider auch nichts :(
|
Re: Prüfen, ob Port bereits belegt ist
mach mal das exit; weg
|
Re: Prüfen, ob Port bereits belegt ist
Ändert leider auch nichts :?
Ihr könnt es ja selbst mal probieren! |
Re: Prüfen, ob Port bereits belegt ist
Hi,
auch wenn der Thread schon ein bisschen alt ist antworte ich mal der Vollständigkeit für Nutzer der Suchfunktion halber ;) Bitte berichtigen, falls ich falsch liege, das ist nur meine subjektive ungeprüfte Erfahrung: Indy nutzt nicht nur die DefaultPort-Eigenschaft, sondern zur Laufzeit auch die Bindings der jeweiligen Komponente, in der IP und Port gespeichert werden. Diese sollten also auch angepasst werden, wenn der Port zur Laufzeit verändert wird. cu |
Re: Prüfen, ob Port bereits belegt ist
Hi,
Amo..... hat genau recht du must die Bindings auch löschen, sonst bekommst Du den FEhler immer wieder !
Delphi-Quellcode:
GRuß Data
procedure TfrmMain.FormCreate(Sender: TObject);
begin ... Webserver.DefaultPort := 80; while StartWebserver = false do begin // WEbserver zur Sicherheit hier nochmal anhalten, müßte aber eigentlich defintiv aus seien Webserver.Active := false; // Jetzt die Bindings löschen/leeren Webserver.Bindings.clear; // Standrad-Port um eins erhöhen Webserver.DefaultPort := Webserver.DefaultPort +1; end; ... end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz