アドレスが既に使用中のエラー(EADDRINUSE)の解決方法


  1. ポート番号の競合: エラーメッセージの中に表示されている「127.0.0.1:8000」は、ポート番号8000が既に他のプロセスによって使用されていることを示しています。これを解決するには、使用中のポート番号を特定し、競合を回避する必要があります。

    解決方法:

    • 別のポート番号を指定する: サーバーを起動する際に、使用されていない別のポート番号を指定します。例えば、8000ではなく、8001や8080などを試してみてください。
    • 使用中のプロセスを終了する: 使用中のポート番号を特定し、そのプロセスを終了することでポートを解放できます。Unix系のシステムでは、lsof -i :8000コマンドを使用してポートの使用状況を確認し、kill <プロセスID>コマンドを使用してプロセスを終了します。
  2. タイムアウトや再起動による競合: 一部の場合では、前回のサーバーの起動が正常に終了しなかったり、タイムアウトしたりした場合に、ポート番号がまだ使用中と判断されることがあります。

    解決方法:

    • タイムアウトを待つ: 前回のサーバーがタイムアウトするのを待つことで、ポート番号が解放されることがあります。しばらく待ってから再度サーバーを起動してみてください。
    • コンピューターを再起動する: 前回のサーバーのプロセスが完全に終了しなかった場合、コンピューターを再起動することでポート番号が解放されることがあります。
  3. ソケットのクローズ: サーバーコード内でソケットを適切にクローズしなかった場合にも、このエラーが発生することがあります。

    解決方法:

    • ソケットを明示的にクローズする: サーバーの終了時にソケットを正しくクローズするようにします。以下はNode.jsでの例です。

      const server = app.listen(8000, () => {
      console.log('Server started on port 8000');
      });
      // サーバー終了時にソケットをクローズする
      process.on('SIGINT', () => {
      server.close();
      });