AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Zufälliger freier TCP Port abfragen
Thema durchsuchen
Ansicht
Themen-Optionen

Zufälliger freier TCP Port abfragen

Ein Thema von cytrinox · begonnen am 6. Feb 2009 · letzter Beitrag vom 6. Feb 2009
Antwort Antwort
cytrinox

Registriert seit: 4. Sep 2006
88 Beiträge
 
#1

Zufälliger freier TCP Port abfragen

  Alt 6. Feb 2009, 10:55
Hi,

für eine IPC Speziallösung die ich mir geschrieben habe verwende ich den Indy10 TCPServer.
Zum Test hab ich den einfach mal auf 127.0.0.1:5000 gebunden.

Das Programm dass diesen Server aber startet, kann zwar pro Windows-User nur einmal gestartet werden, auf einem Terminal-Server können aber mehrere Instanzen laufen.

Also hab ich mir überlegt, einfach bei Windows oder den Indy Komponenten "abzufragen", welcher Port noch frei ist, so dass ich die Vergabe dynamisch machen kann. Den Port schreib ich dann in die Windows-Registry unter HKEY_CURRENT_USER. Die Routinen, die dann auf den IPC Dienst zugreifen müssen, holen sich den Port dort raus.

Gibt es eine Art getRandomFreeTCPPort() Funktion oder bleibt mir nur übrig mit try/except so lange einen Port Range durchzuprobieren bis es klappt?
  Mit Zitat antworten Zitat
Benutzerbild von smallsmoker
smallsmoker

Registriert seit: 12. Nov 2007
Ort: Duisburg
283 Beiträge
 
#2

Re: Zufälliger freier TCP Port abfragen

  Alt 6. Feb 2009, 10:59
also ich hab mir was zusammengewurschtelt um zu gucken ob ein port offen ist kannst das ja in ner schleife benutzen vieleicht ist es schneller als es mit try except und den indys zu machen da man bei mir ein timeout einstellen kann...

edit: es fehlt die unit utils man kann einfach delay durch sleep ersetzen oder es reinkopieren.
Angehängte Dateien
Dateityp: pas unitportscan_325.pas (2,3 KB, 26x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Zufälliger freier TCP Port abfragen

  Alt 6. Feb 2009, 11:40
Und woher soll dann ein Client wissen, welchen Port er gerade nehmen soll?
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
cytrinox

Registriert seit: 4. Sep 2006
88 Beiträge
 
#4

Re: Zufälliger freier TCP Port abfragen

  Alt 6. Feb 2009, 11:45
Naja, das Problem ist eher, wenn z.b. 50 Instanzen laufen und die nächste will auch einen Server starten müssen 50 try/excepts durchgeführt werden oder mit deiner pas Datei eben 50x mal ein connect().

Ich könnte allerdings auch einfach eine Zufallszwahl zwischen 0 und 1000 nehmen und z.B. auf 5000 addieren - und das mache ich solange bis keine Exception mehr geworfen wird.

Aber mal eine andere Frage: Ist das Konzept so brauchbar? Also ich meine, muss ich mir Gedanken machen dass ein Admin vielleicht aus irgendeinem Grund per Firewall die Verbindung blockt? Oder dass irgendwelche AntiVirus+Firewall Software die Verbindung verhindern?

Ich sehe zwar momentan überhaupt keinen Grund warum man/die Software sowas tun sollte, aber technisch möglich ist es ja

Laufen soll das ganze nämlich von Windows 2000 über Windows XP Home (Laptops usw) bis hin zu Windows 2008 Server bzw. CITRIX Systeme.

Zitat von sirius:
Und woher soll dann ein Client wissen, welchen Port er gerade nehmen soll?
Steht doch schon im Beitrag...
Der Server speichert die Portnummer im HKEY_CURRENT_USER Zweig
  Mit Zitat antworten Zitat
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Zufälliger freier TCP Port abfragen

  Alt 6. Feb 2009, 12:06
Sorry, überlesen.

Ich weis nicht, wie die indys aufgebaut sind. Aber wenn man den Port 0 angibt bekommt man eigentlich einen freien zugewiesen.
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
cytrinox

Registriert seit: 4. Sep 2006
88 Beiträge
 
#6

Re: Zufälliger freier TCP Port abfragen

  Alt 6. Feb 2009, 12:37
Booh, wunderbar.

Über TCPIPCServer.Bindings.Items[0].Port komme ich nach einem active := true auch gleich an die entsprechende Portnummer.


Vielen Dank
  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 13:19 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