2012-10-15 6 views
7

Ich versuche, eine zufällige Portnummer für eine TCP-Verbindung zu generieren. Von: http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers Ich weiß, dass der Bereich der Ports von 1024 bis 49151 nicht reserviert sind, aber einige von ihnen sind nur UDP, wie kann ich nur gültige TCP-Port-Nummern generieren?Zulässiger Portbereich für TCP

+1

Alles oberhalb von 1024 wird für einen TCP-Client als in Ordnung angesehen. Sie denken zu viel darüber nach, wenn Sie einen Eintrag auf einer Wikipedia-Seite sehen müssen, um einen "akzeptablen" TCP-Port zu erhalten. Alle TCP-Ports = <1024 sind für Client-Socket-Quellports zulässig. –

Antwort

15

Wenn Sie an Port 0 binden, wählt das Betriebssystem einen gültigen, nicht in Verwendung befindlichen Port aus.

Wenn Sie zufällig im Gegensatz zu arbiträre, sollte alles von 49152-65535 sicher für die automatische Verwendung so sein, also wählen Sie einfach eine zufällige Zahl innerhalb dieses Bereichs. (Sie müssen den Vorgang jedoch möglicherweise wiederholen, wenn dieser Anschluss verwendet wird.)

+0

Also jeder Port in diesem Bereich würde TCP unterstützen? weil von der Wiki-Seite einige Ports nur für UDP markiert sind. Wie würde ich Java einchecken, wenn ein Port verwendet wird? Vielen Dank! –

+1

Alle Ports von 1-65535 unterstützen TCP, das auf dieser Seite aufgelistete TCP/UDP bezieht sich auf registrierte Ports; das heißt, Ports, die für eine bestimmte Verwendung zugewiesen sind. Überprüfen Sie, ob ein Port in Verwendung ist, indem Sie versuchen, ihn zu binden. Wenn Sie einen Fehler über den verwendeten Port erhalten, ist dies der Fall. Wenn es egal ist, welchen Port du bekommst, aber nur, dass du einen bekommst, dann solltest du Port 0 binden und dann den lokalen Port von deinem neuen Socket holen, um herauszufinden, was du hast. – Eric

+2

Um etwas näher zu erläutern, bindet sich Ihr lokaler Server an einen bestimmten Port, aber UDP und TCP befinden sich in verschiedenen "Namespaces" und sind daher unabhängig. Server, die _both_ verwenden, öffnen normalerweise dieselbe Portnummer für beide. _Connections_ sind durch ein 5-Tupel von Protokoll, local-addr, local-port, remote-addr, Remote-Port definiert, was erklärt, warum Sie kein Übersprechen und ähnliches bekommen. –

Verwandte Themen