HOWTO · Python
ConnectionRefusedError: [Errno 61] Python で接続が拒否されました
このチュートリアルでは、Python の ConnectionRefusedError について説明します。
このページの内容
クライアント サーバー プログラムを設計しているときに、エラー ConnectionRefusedError が発生することがあります。 これは、コーディングの問題により、クライアント プログラムがサーバー プログラムに接続できなかった場合に発生しました。
この記事では、Python で ConnectionRefusedError を取得する方法を示します。 また、トピックをより簡単にするために、必要な例と説明を使用してトピックについて説明します。
エラー ConnectionRefusedError が Python でどのように発生するか
すでに説明したように、このエラーは主にクライアント プログラムがサーバーに接続できない場合に発生します。 これらを理解するために、以下で共有するクライアント/サーバーのサンプル プログラムを考えてみましょう。
以下のサーバー プログラムのサンプル コードを見てみましょう。
import socket
def ServerProgram():
host = socket.gethostname()
port = 5000
ServerSocket = socket.socket()
ServerSocket.bind((host, port))
ServerSocket.listen(2)
conn, ClientAddress = ServerSocket.accept()
print("Connection from: " + str(ClientAddress))
while True:
ClientMsg = conn.recv(1024).decode()
if not ClientMsg:
break
print("from connected user: " + str(ClientMsg))
ClientMsg = input(" -> ")
conn.send(ClientMsg.encode())
conn.close()
if __name__ == "__main__":
ServerProgram()
上記のプログラムでは、ポートを 5000 に設定していることに注意してください。 次に、クライアント プログラムを見てみましょう。
import socket
def ClientProgram():
host = socket.gethostname()
port = 5001
ClientSocket = socket.socket()
ClientSocket.connect((host, port))
ClientMessage = input(" -> ")
while ClientMessage.lower().strip() != "bye":
ClientSocket.send(ClientMessage.encode())
ServerMsg = ClientSocket.recv(1024).decode()
print("Received from server: " + ServerMsg)
ClientMessage = input(" -> ")
ClientSocket.close()
if __name__ == "__main__":
ClientProgram()
クライアント プログラムで意図的にミスを犯しています。クライアント プログラムのポートを 5001 に設定しています。 サーバー プログラムの後にクライアント プログラムを実行すると、次のようなエラー メッセージが表示されます。
Traceback (most recent call last):
File "F:\Python\client.py", line 25, in <module>
ClientProgram()
File "F:\Python\client.py", line 9, in ClientProgram
ClientSocket.connect((host, port)) # connect to the server
ConnectionRefusedError: [WinError 10061] No connection could be made because the target machine actively refused it
このエラーは、クライアント プログラムがサーバーに接続できなかったために発生しました。 このエラーは、サーバー プログラムを最初に起動した場合にも発生する可能性があります。
この状況では、クライアント プログラムは接続するサーバー プログラムを見つけられません。
Python で ConnectionRefusedError を修正する方法
上記のエラーは、正確なサーバー ポート 5000 を使用して簡単に修正できます。 コードを更新すると、次のようになります。
import socket
def ClientProgram():
host = socket.gethostname()
port = 5000 # We fixed here.
ClientSocket = socket.socket()
ClientSocket.connect((host, port))
ClientMessage = input(" -> ")
while ClientMessage.lower().strip() != "bye":
ClientSocket.send(ClientMessage.encode())
ServerMsg = ClientSocket.recv(1024).decode()
print("Received from server: " + ServerMsg)
ClientMessage = input(" -> ")
ClientSocket.close()
if __name__ == "__main__":
ClientProgram()
クライアント プログラムを実行すると、クライアント側で以下の出力が得られます。
-> Hi Server
Received from server: Hi Client
-> This is a message from the client
Received from server: This is a message from the server
そして、サーバー側で以下の出力が表示されます。
Connection from: ('192.168.0.159', 11418)
from connected user: Hi Server
-> Hi Client
from connected user: This is a message from the client
-> This is a message from the server
クライアント プログラムを実行する前に、サーバー プログラムを実行する必要があることに注意してください。 そうしないと、同じエラーが発生します。
ここで説明するコマンドとプログラムは、Python プログラミング言語で記述されていることに注意してください。