2010-03-16 8 views
8

ich einen FTP-Server-Bibliothek ich schreibe (weil ich es brauche und ich kann keine gute Lösungen für diese finden) in C# und ich habe zwei Fragen:Suchen Sie einen freien Port

  • Wie funktioniert IPEndPoint einen freien Port finden, wenn ich zum Beispiel new IPEndPoint(IPAddress.Any, 0) mache?

  • Ist es möglich, einen freien Port aus einem Bereich (1.023-65.535 zum Beispiel) zu finden, ohne die GetActiveTcpConnections Methode? Weil es langsam ist - ich brauche einen schnelleren Weg, dies zu tun.

+1

mögliches Duplikat von [Den nächsten TCP-Port in .Net finden] (http://stackoverflow.com/questions/138043/find-the-next-tcp-port-in-net) –

Antwort

13

Sobald Sie auf einem nicht belegt Port (0) beginnen zu hören, wird es vom Betriebssystem zugewiesen werden (oder durch das TCP/IP-Stack genauer gesagt). Da der Stack alle Ports verwaltet, kann er einen freien Port zuweisen.

Starten Sie einfach Ihre Verbindung und überprüfen Sie dann den Port in der LocalEndpoint-Eigenschaft, um ihn an den Client zu übergeben. Die TcpListener documentation enthält weitere Informationen dazu.

Wenn Sie eine freie in einer Reihe finden müssen, müssen Sie nur die gesamte Bandbreite durchlaufen und versuchen, mit jedem zu beginnen. Wenn Sie erfolgreich sind, haben Sie einen freien Port gefunden, und Sie können Ihre Schleife verlassen. Wenn nicht, fahre einfach mit der Schleife fort. Dies ist der einzige zuverlässige Weg, um dies zu tun, da Sie sonst mit anderen Prozessen oder gar Threads in eine Race-Bedingung geraten, die beide den gleichen freien Port auswerten und der erste, der sie verwendet "gewinnt", während der andere Code nicht funktioniert kann den Port benutzen.

Verwandte Themen