2016-05-05 4 views
0

アンドロイドアプリでは、アプリが強制終了することがあります。ただし、サーバーソケットは引き続き使用されます。だから、私はアプリの次回起動時には、それは私にエラー開いている場合は強制的にソケットを閉じる

java.net.BindExceptionを与える:バインドに失敗しました:EADDRINUSE( 使用ですでにアドレス)

私のコードをソケットを開始しますは

ServerSocket serverSocket; 
      serverSocket = new ServerSocket(); // <-- create an unbound socket first 
      serverSocket.setReuseAddress(true); 
      serverSocket.bind(new InetSocketAddress(SERVER_PORT)) 

私は再起動時にそれを確認したいと考えています。それはソケットを再利用する必要があります。

答えて

3

制御されない例外が原因で、あなたのアプリが強制終了されているようです。理想的には、回避策を探すのではなく、アプリを強制的に閉じる問題を修正する必要があります。

いずれにしても、リソースを閉じるには常にfinallyブロックを使用する必要があります。このようにして、例外が発生しても閉じられます。あなたがroot権限なしで別のプロセスに属し近い既存のソケットを強制することはできません

ServerSocket serverSocket = null; 
try (ServerSocket serverSocket = new ServerSocket();) { 
    serverSocket.bind(new InetSocketAddress(SERVER_PORT)); 
    // Do your server stuff 
} 

注:

ServerSocket serverSocket = null; 
try { 
    serverSocket = new ServerSocket(); // <-- create an unbound socket first 
    serverSocket.bind(new InetSocketAddress(SERVER_PORT)); 
    // Do your server stuff 
} finally { 
    if (serverSocket != null) { 
     serverSocket.close(); 
    } 
} 

以上、トライ・リソースで可能な場合は(Javaの7+)を使用します。

関連する問題