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 は解決されます。