webForumDet fria alternativet

dynamisk port

9 svar · 429 visningar · startad av toba

tobaMedlem sedan jan. 20059 inlägg
#1

Hej
Någon som vet hur man får en socket att binda första lediga port? Så man inte behöver ange en själv och råka ta en som är upptagen.

spangoMedlem sedan juni 20006 147 inlägg
#2

Du menar, att få en ServerSocket att binda första bästa port? Om porten inte går att binda kastas ett exception, fånga och prova på nästa port. Typ:

ServerSocket server;
int port = 1024;
boolean foundPort = false;
do {
    try {
        server = new ServerSocket(port);
        foundPort = true;
    } catch (IOException e){
        port++;
    }
} while (!foundPort);

\t Det är rekommenderat att du börjar leta port på 1024, portnummer lägre än så måste man vara root för att binda under *NIX.

tobaMedlem sedan jan. 20059 inlägg
#3

Nä inte riktigt vad jag tänkte. Tänkte mer att det skulle gå att låta systemet ge mig första lediga port och att jag inte skulle behöva bry mig om exceptions.

frontMedlem sedan aug. 2000371 inlägg
#4

API skrev:

public ServerSocket(int port)
throws IOException

Creates a server socket, bound to the specified port. A port of 0 creates a socket on any free port.
tobaMedlem sedan jan. 20059 inlägg
#5

Precis vad jag var ute efter. Tackar

LimeMedlem sedan sep. 2001837 inlägg
#6

Men... hur ska du då kunna koppla mot porten om du inte vet vilken port det är den har tagit??

"Hej jag har nytt telefonnummer. Ring mig."

tobaMedlem sedan jan. 20059 inlägg
#7

Jag använder metoden getLocalPort() på min serversocket när jag har skapat den, så får jag reda på vilken port den tog.

LimeMedlem sedan sep. 2001837 inlägg
#8

Jo, det vet jag också att man kan göra, men hur låter du klienter på andra datorer få veta vilken port du valt så de kan koppla upp sig??

tobaMedlem sedan jan. 20059 inlägg
#9

Applikationen jag gör är ett chatsystem och jag behövde kunna binda till en port dynamiskt när en klient vill skapa en chattgrupp. Klienten har då redan en koppling mot servern där den får reda på vilken port den skall koppla upp sig mot om den vill vara med i chattgruppen.

LimeMedlem sedan sep. 2001837 inlägg
#10

Ah...

Jag hade nog inte löst det på det sättet. Jag hade gjort en pool ur vilken man får nästa lediga.

Men det är jag det...

Genererad på 375 ms · cache AV · v20260730165559-full.f96bc7eb