ネットワーキング
 Computer >> コンピューター >  >> ネットワーキング >> ネットワーキング

Pythonのソケットエラー48(Address already in use)の原因と解決策

ソケットエラー48は、プロセスがすでに使用中のポートへバインドしようとした際に発生するPythonのエラーです。エラーメッセージとしては「socket.error: [Errno 48] Address already in use」と表示されます。

Pythonのソケットエラー48(Address already in use)の原因と解決策

「socket.error: [Errno 48] Address already in use」エラーの原因

調査の結果、このエラーの主な原因は以下の通りです。

  • ポートへのプロセスのバインド: サーバー上でプロセスを作成すると、インターネットと通信するためにポートが使用されます。ポートとは、一度に一人のゲストしか受け入れられないホストのようなものです。ポートを明示的に指定しない場合、サーバーはデフォルトのポートを使用してプロセスを作成します。そのため、次にプロセスを作成する際には、デフォルトのポートがすでに使用中になっているため、別のポート番号を指定する必要があります。

解決策1:ポート番号を指定する

このエラーは、特定のプロセスをデフォルトのポートにバインドしようとしたものの、そのデフォルトのポートがすでに別のプロセスによって使用されている場合に発生することがほとんどです。そこでこの手順では、プロセスをバインドするポート番号を明示的に指定します。

  1. おそらく、現時点では以下のコマンドを使ってプロセスを作成しているはずです。
    $ python -m SimpleHTTPServer
  2. 代わりに、以下のようにポート番号を指定したコマンドを使ってプロセスを作成します。
    $ python -m SimpleHTTPServer (ポート番号)
  3. プロセスが作成されるのを待ち、問題が解消されたかどうかを確認します。

解決策2:ポートを解放する

ポートがすでに別のプロセスによって使用されている場合、新しいプロセスはそのポート上で動作できません。そこでこの手順では、既存のプロセスを終了させてポートを解放し、その後で新しいプロセスを実行します。

  1. まず、特定のポートを使用しているプロセスの一覧を表示するために、以下のコマンドを実行します。
    $ ps -fA | grep python
  2. コマンドの出力は、以下のような行になります。
    601 88234 12788 0 9:53PM ttys000 0:00.16 python -m SimpleHTTPServer
  3. このうち、プロセスを終了させるために使用するのはプロセスID「88234」です。
  4. 以下のコマンドでプロセスを終了させます。
    kill 88234

    あるいは、以下のコマンドでも強制終了できます。

    sudo kill -9 PID
  5. これで、以下のコマンドを使ってプロセスをこのポートにバインドできるようになります。
    $ python -m SimpleHTTPServer (ポート番号)
  6. これでプロセスが正常に作成されます。

なお、macOSやLinux環境では、「lsof -i :ポート番号」コマンドを使うことで、どのプロセスが該当ポートを占有しているかを簡単に特定することもできます。

解決策3:Raspberry Piを再起動する(Raspberry Pi限定)

Raspberry Piの場合は、本体を再起動するか、ターミナルシェルを終了することでこのエラーを解消できます。Raspberry Piはプロセスを自動的に終了できないことがあり、ポート上に残った以前のプロセスが原因でこのエラーが発生するためです。

  1. 「プロセスを終了できません。アクセスが拒否されました」エラーの解決方法

    「ブラウザを起動するたびにメモリを大量に消費して困っています。最近ではさらに悪化し、タスクマネージャーで『タスクの終了』を実行してもバックグラウンドプロセスを停止できません。どうすればいいのでしょうか?」— あるWindowsユーザーの悩み アプリケーションやサービスに関連するプロセスを終了できないという問題は、多くのWindowsユーザーが直面するよくあるトラブルです。「大した問題ではない」と思うかもしれませんが、上記の事例のように、ブラウザが必要以上にPCのメモリを消費しているケースもあります。さらに深刻なケースでは、安全でないソースからダウンロードした悪意のあるアプリケーションがコンピュ

  2. Windows 11 の「CRITICAL_PROCESS_DIED」ブルースクリーンエラーを解決する8つの対処法

    Windows 11 で発生する CRITICAL_PROCESS_DIED(重大なプロセスが停止しました)のブルースクリーンエラーは、OSの正常な動作に必要不可欠なプロセスが、予期せず突然終了したことを示しています。新しいハードウェアやソフトウェアをインストールした後にこのエラーが発生することもあれば、Windows 11 のアップデート後にブルースクリーンが表示されたという報告もあります。実際に筆者も経験したことがありますが、ある日突然 Windows 11 が応答しなくなり、ブルースクリーンエラーでクラッシュしました。さまざまな対策を試した結果、最終的には Windows 11 を初期化