ConnectionRefusedError: [Errno 61] Python で接続が拒否されました
クライアント サーバー プログラムを設計しているときに、エラー 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 プログラミング言語で記述されていることに注意してください。
Aminul Is an Expert Technical Writer and Full-Stack Developer. He has hands-on working experience on numerous Developer Platforms and SAAS startups. He is highly skilled in numerous Programming languages and Frameworks. He can write professional technical articles like Reviews, Programming, Documentation, SOP, User manual, Whitepaper, etc.
LinkedIn関連記事 - Python Error
- AttributeError の解決: 'list' オブジェクト属性 'append' は読み取り専用です
- AttributeError の解決: Python で 'Nonetype' オブジェクトに属性 'Group' がありません
- AttributeError: 'generator' オブジェクトに Python の 'next' 属性がありません
- AttributeError: 'numpy.ndarray' オブジェクトに Python の 'Append' 属性がありません
- AttributeError: Int オブジェクトに属性がありません
- AttributeError: Python で 'Dict' オブジェクトに属性 'Append' がありません