2017-07-12 1 views
0

I持ってキープアライブServerSocketのための次のコードは、JDK 1.8、Windows7の:のJava ServerSocketを結合したが聞いていない

serverSocket = new ServerSocket(); 
    serverSocket.setReuseAddress(true); 
    serverSocket.bind(new InetSocketAddress(port)); // <-- port is 19876 
    System.out.println("Server bound on " + port + " " + serverSocket); 

問題が時々ある私はこれを実行すると、それはnetstatコマンドで聴いて現れ、時にはそれをしません。例外がないので、実際にバインドされると期待していますが、ランダムです。 netstatのわずかのprintln後

正しい動作:

TCP 0.0.0.0:19876   0.0.0.0:0    LISTENING  7944 
    TCP [::]:19876    [::]:0     LISTENING  7944 

Netstatのわずかのprintln後:両方の場合において

C:\Users\tmplr>netstat -ano | find "198" 

C:\Users\tmplr>netstat -ano | find "198" 

そこには例外はありませんとのprintlnが同じ生成:

Server bound on 19876 ServerSocket[addr=0.0.0.0/0.0.0.0,localport=19876] 

ここに何が間違っているのか、どうすれば問題をデバッグできますか?

答えて

1

あなたはそれを聞くためにのためにacceptメソッドを呼び出す必要があります:

boolean isStopped = false; 
while(!isStopped){ 
    Socket clientSocket = serverSocket.accept(); 

    //do something with clientSocket 
} 
+0

を、なぜそれが受け入れを呼び出すことなく、第1の場合には聞いていますか?私の理解では、 'listen'はすでに' bind'を呼び出すことに含まれています。 – Templar

関連する問題