2016-10-31 4 views
-1

I Überprüfung bin für die Verfügbarkeit eines TCP-Port wie folgt aus:Java - Überprüfen Sie für TCP-Port-Verfügbarkeit

public static boolean isTCPPortAvailable(int hostPort) { 
    ServerSocket tempSocket = null; 
    try { 
     tempSocket = new ServerSocket(); 
     // Enable Reuse before binding 
     tempSocket.setReuseAddress(true); 
     tempSocket.bind(new InetSocketAddress(hostPort)); 
     return true; 
    } 
    catch (IOException ex) { 
     // Denotes that port is in use 
    } 
    finally { 
     if(tempSocket != null) { 
      try { 
       tempSocket.close(); 
      } 
      catch (IOException e) { 
       // Not to be thrown 
      } 
     } 
    } 
    return false; 
} 

Das Problem ist, dass diese Methode true zurückkehrt, auch wenn Port in LISTENING Zustand befindet. Kann mir jemand helfen, das Problem zu finden?

HINWEIS: Ich verwende setReuseAddress(true), um den Status TIME_WAIT zu ignorieren.

HINWEIS: Ich bin auf Windows.

+0

Down Wähler können Sie bitte Ihre Gründe kommentieren? –

Antwort

0

Sie brauchen nichts davon. Verwenden Sie einfach Port null. Das System gibt Ihnen den nächsten verfügbaren Port.

NB ein IOException tut nicht 'bezeichnen, dass der Port verwendet wird'. Nur einigeBindExceptions tun, dass.

+0

Nein, ich muss Portnummern als Eingabe nehmen. Ich kann keine andere Portnummer verwenden. –

+0

Ich bin überrascht, dass eine Person mit Ihrem Ruf einen Kommentar als Antwort schreiben sollte. Und woher wissen Sie, was das OP braucht? Vielleicht hat sein Programm eine vom Benutzer für den Port festgelegte Eigenschaft und möchte sicherstellen, dass der vom Benutzer angeforderte Port verfügbar ist? – RealSkeptic

+0

@ShoaibShakeel Aus welchem ​​Grund? Woher kommt diese Anforderung? – EJP

Verwandte Themen