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

Sheeraz Gul 2023年6月20日
  1. Java で java.net.BindException: Address already in use: Bind を修正
  2. 解決策 1: サーバーを別のポートで実行する
  3. 解決策 2: 前のプロセスを強制終了する
Java.Net.BindException: Address Already in Use: Bind を修正します。

このチュートリアルでは、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 は解決されます。

著者: Sheeraz Gul
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

関連記事 - Java Exception