2017-03-14 52 views
0

私はこのコードの使用を誤解するかもしれませんが、私が理解しているところでは、setReuseAddress(true)を呼び出すと、コンピュータがまだ使用中であると考えても使用できるようになります。setReuseAddress(true)でもバインドエラー

シナリオ:以下のコードがあります。クラッシュするとポートを閉じないため、次回の起動時にバインドエラーが発生します。 setReuseAddress(true)を使用してポートを強制的に開こうとしましたが、同じエラーがスローされます。これが正しいコードなら、どうすれば使用できますか?それが間違ったコードなら、何がこの動作を可能にしますか?

import java.io.IOException; 
import java.io.PrintWriter; 
import java.net.InetSocketAddress; 
import java.net.ServerSocket; 
import java.net.Socket; 
import java.util.Date; 

public class ServerPsswd { 

    public static void main(String[] args) throws IOException { 


     ServerSocket listener = new ServerSocket(); 
     listener.setReuseAddress(true); 
     listener.bind(new InetSocketAddress(9090)); 
     try { 
      while (true) { 
       Socket socket = listener.accept(); 
       try { 
        PrintWriter out = 
         new PrintWriter(socket.getOutputStream(), true); 
        out.println("tada!"); 
        out.println("yays"); 
       } finally { 
        socket.close(); 
       } 
      } 
     } 
     finally { 
      listener.close(); 
     } 
    } 
} 
+0

ああを閉じた後、タイムアウト期間中に接続を許可することで、問題は、実際に、私はそれの2つのインスタンス知らず知らずのうち – Blaine

答えて

2
+0

[OK]を実行していたということかもしれませんので、ポートがまったく閉じられていないときには、プログラムのクラッシュに役立たないでしょう。これに対処する標準的な方法はありますか? – Blaine

+0

これは、大量のポート用に設計されており、接続ごとに数ミリ/マイクロ秒がカウントされます – efekctive

関連する問題