ConnectionRefusedError: [Errno 61] Python で接続が拒否されました

MD Aminul Islam 2023年6月21日
  1. エラー ConnectionRefusedError が Python でどのように発生するか
  2. Python で ConnectionRefusedError を修正する方法
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 プログラミング言語で記述されていることに注意してください。

著者: MD Aminul Islam
MD Aminul Islam avatar MD Aminul Islam avatar

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