Socket.Gaierror を修正: [Errno 8] ノード名もサーブ名も指定されていないか、Python で不明

Rohan Timalsina 2023年10月10日
  1. socket.gaierror: [Errno 8] nodename nor servname provided, or not known を Python で再作成する
  2. Python で socket.gaierror: [Errno 8] nodename nor servname provided, or not known を修正
Socket.Gaierror を修正: [Errno 8] ノード名もサーブ名も指定されていないか、Python で不明

Python の socket モジュールは、Berkeley ソケット API へのインターフェイスを提供します。 ソケットは、ネットワーク上の 2つのノードを接続して相互に通信できるようにします。

socket モジュールを使用しているときに、Python で socket error が発生することがあります。 このチュートリアルでは、Python でそのエラーを解決する方法を説明します。

socket.gaierror: [Errno 8] nodename nor servname provided, or not known を Python で再作成する

ここでは、socket.gaierror を再作成し、Python で解決する方法を説明します。

次のスクリプトは、指定されたポートにクライアントが接続するのを待機するサーバーです。

import socket

s = socket.socket()
host = "localhost"
port = 1234
s.bind((host, port))

s.listen(5)
while True:
    c, addr = s.accept()
    print("Connection received from", addr)
    c.send("Thank you for connecting")
    c.close()

socket.socket() 関数はソケット オブジェクトを作成し、socket.bind() は指定されたアドレスにソケットをバインドします。

socket.accept() は、クライアントの接続時に接続を受け入れます。 接続が成功すると、出力を返し、接続を閉じます。

以下は、指定されたホストに接続するクライアントです。

import socket

s = socket.socket()
host = socket.gethostname()
port = 1234

s.connect((host, port))
print(s.recv(1024))
s.close

server.py をバックグラウンドで実行し、次に client.py を実行します。

python server.py &
python client.py

出力:

ソケットエラー

Python で socket.gaierror: [Errno 8] nodename nor servname provided, or not known を修正

この出力は、コードが s.connect((host, port)) を読み取る 7 行目でエラーが発生したことを示しています。 これは、socket.gethostname() が、Python インタープリターが現在実行されているマシンのホスト名を返すためです。

ただし、ホスト名の代わりにホスト IP アドレスを指定する必要があります。 この問題は、client.py ファイルで hostlocalhost または 127.0.0.1 として割り当てることで解決できます。

import socket

s = socket.socket()
host = "localhost"
port = 1234

s.connect((host, port))
print(s.recv(1024))
s.close

出力:

ソケットエラー修正 - 接続成功

これで、Python で socket error を修正する方法がわかりました。 このチュートリアルがお役に立てば幸いです。

著者: Rohan Timalsina
Rohan Timalsina avatar Rohan Timalsina avatar

Rohan is a learner, problem solver, and web developer. He loves to write and share his understanding.

LinkedIn Website

関連記事 - Python Error