2012-10-15 2 views
7

Sto provando a generare un numero di porta casuale per una connessione TCP. Da: http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers So che l'intervallo di porte è compreso tra 1024 e 49151 non sono riservati, ma alcuni di essi sono solo UDP, come posso generare solo numeri di porta TCP validi?Port Range consentito per TCP

+1

Tutto ciò che supera 1024 è considerato valido per un client TCP. Stai pensando troppo a questo se hai bisogno di vedere una voce su una pagina di Wikipedia per essere una porta TCP "accettabile". Tutte le porte TCP = <1024 sono accettabili per le porte di origine socket client. –

risposta

15

Se si esegue il binding sulla porta 0, il sistema operativo selezionerà una porta valida e non in uso.

Se è necessario casuale anziché arbitrario, qualsiasi cosa da 49152-65535 dovrebbe essere sicuro per l'uso automatico come questo, quindi basta selezionare un numero casuale all'interno di tale intervallo. (Potrebbe essere necessario riprovare se quella porta risulta essere in uso, tuttavia.)

+0

Quindi qualsiasi porta all'interno di tale intervallo supporta TCP? perché dalla pagina wiki, alcune porte sono contrassegnate solo per UDP. Inoltre, come dovrei controllare in Java se una porta è in uso? Grazie! –

+1

Tutte le porte 1-65535 supportano TCP, il TCP/UDP elencato in quella pagina fa riferimento alle porte registrate; cioè, le porte che sono assegnate per un uso specifico. In genere, controllando se una porta è in uso, provate a legarvi, se si ottiene un errore sulla porta in uso, allora lo è. Se non importa quale porta ottieni, ma solo che ne ottieni una, allora dovresti legare la porta 0, e poi togliere la porta locale dal tuo nuovo socket per scoprire cosa hai ottenuto. – Eric

+2

Per elaborare un bit, il server locale si collega a una porta specifica ma UDP e TCP si trovano in "spazi dei nomi" diversi e quindi indipendenti. I server che usano _both_ tipicamente apriranno lo stesso numero di porta per entrambi. _Connections_ sono definite da una 5-tupla di protocol, local-addr, local-port, remote-addr, remote-port che spiega il motivo per cui non si ottiene cross-talk e simili. –