HOWTO · Java

Java.Net.BindException: Address Already in Use: Bind を修正します。

このチュートリアルでは、java.net.BindException: Address already in use: Java のバインド エラーについて説明します。

このチュートリアルでは、Java での java.net.BindException: Address already in use: Bind エラーについて説明します。

Java で java.net.BindException: Address already in use: Bind を修正

エラー java.net.BindException: Address already in use: Bind は、1つのポートが複数のアプリケーションで使用されている場合に発生します。これは、アドレスが既に使用されていることもエラーに示されているためです。 例外は、使用しようとしているポートを他のプロセスが既に使用していることを示しています。

このエラーを解決するには、サーバーを別のポートで実行するか、ポートで以前のプロセスを強制終了します。 この問題を解決するには、特定のポートで実行されているプロセスを知る必要があります。

ポートで競合プロセスを見つける

ポートで java.net.BindException: Address already in use: Bind エラーが発生している場合は、ポートで実行されている他のプロセスを見つけることができます。 netstat コマンドを使用して、現在の TCP/IP 接続を知ることができます。

ここでは、さまざまなプラットフォームでの netstat の使用について説明します。

ウィンドウズ:

たとえば、ポートは 8080 です。 Windows では、netstat コマンドの出力の最後の列に、ポート 8080 で実行されているプロセスのプロセス ID が表示されます。 次のコマンドを参照してください。

netstat -ano | find "8080"

コマンドの出力は次のとおりです。

TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 12345

プロセス 12345 はポート 8080 で実行されています。

マックOS:

Mac OS の場合、コマンドは netstat とは異なります。 netstat の代わりに、lsof を使用して、特定のポートで実行されているプロセスをチェックします。

次のコマンドを参照してください。

lsof -t -i:8080

このコマンドの出力には、プロセス ID のみが表示されます。

12345

Unix/Linux:

Linux/Unix のコマンドは次のようになります。

netstat -an | grep "8080"

ここでの出力も Windows と同様であり、同様に読み取ることができます。

TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 12345

プロセス 12345 はポート 8080 で実行されています。

java.net.BindException: Address already in use: Bind 例外を解決する 2つの解決策を次に示します。

解決策 1: サーバーを別のポートで実行する

この例外に対する 1つの解決策は、別のポート番号でプロセスを実行することです。 前のポートで他のプロセスが実行されているかどうかがわかったら、そのプロセスを別のポートに移すことができます。

たとえば、Tomcat を使用している場合、サーバーのポートを変更する手順を次に示します。

  • Tomcat ディレクトリを開き、次に conf フォルダーを開きます。
  • server.xml をメモ帳またはその他のテキスト エディターで編集します。
  • ここで、コネクタ ポートを新しいポート番号に置き換えます。 次のようになります。
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

ポートを変更した後:

<Connector port="8880" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

サーバーが別のポート番号に移行されると、エラー java.net.BindException: アドレスは既に使用されています: Bind は解決されます。

解決策 2: 前のプロセスを強制終了する

ポートですでに実行されているプロセスを強制終了することで、そのポートでプロセスを実行でき、java.net.BindException: Address already in use: Bindというエラーが解決されます。

コマンドを実行してプロセスを強制終了できますが、コマンドもプラットフォームごとに異なります。

ウィンドウズ:

taskkill /F /PID 12345

マックOS:

kill -9 12345

Unix/Linux:

kill - 12345

上記のコマンドは、さまざまなプラットフォームの現在のポートでプロセスを強制終了できます。 プロセスを強制終了した後、現在のポートでプロセスを実行できます。エラー java.net.BindException: Address already in use: Bind は解決されます。