ConnectionRefusedError: [Errno 111] 연결 거부됨

Zeeshan Afridi 2023년6월21일
  1. Python에서 ConnectionRefusedError: [Errno 111] 연결 거부가 발생하는 이유
  2. Python에서 ConnectionRefusedError: [Errno 111] 연결 거부를 해결하는 방법
  3. 결론
ConnectionRefusedError: [Errno 111] 연결 거부됨

이 오류는 클라이언트가 서버 스크립트 시스템의 포트에 연결할 수 없음을 나타냅니다. 서버를 ping할 수 있으므로 그럴 수 없습니다.

이는 대상으로의 부적절한 라우팅과 같은 여러 가지 이유로 인해 발생할 수 있습니다. 두 번째 가능성은 클라이언트와 서버(서버 또는 클라이언트 중 하나일 수 있음) 사이에 방화벽이 있다는 것입니다.

네트워크 주소를 기반으로 서버와 클라이언트가 모두 동일한 LAN에 있어야 하므로 통신을 중지할 수 있는 라우터나 방화벽이 없어야 합니다.

Python에서 ConnectionRefusedError: [Errno 111] 연결 거부가 발생하는 이유

이 오류는 잘못된 IP 또는 포트로 인해 클라이언트가 서버에 액세스할 수 없거나 주소가 고유하지 않고 다른 서버에서 사용하는 경우에 발생합니다.

연결 거부 오류는 서버가 실행 중이 아닌 경우에도 발생하므로 서버가 먼저 연결을 수락해야 하므로 클라이언트가 서버에 액세스할 수 없습니다.

코드 예:

# server code
import socket

s = socket.socket()
host = socket.gethostname()
port = 1717
s.bind((host, port))

s.listen(5)
while True:
    c, addr = s.accept()
    print("Got connection ", addr)
    c.send("Meeting is at 10am")
    c.close()
# client code
import socket

s = socket.socket()
host = "192.168.1.2"
port = 1717

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

출력:

socket.error: [Errno 111] Connection refused

Python에서 ConnectionRefusedError: [Errno 111] 연결 거부를 해결하는 방법

수신 소켓을 가능한 한 액세스 가능한 상태로 유지하십시오. 아마도 접근성은 LAN에 영향을 미치지 않는 하나의 인터페이스에서만 발생할 것입니다.

반면에 127.0.0.1 주소만 수신 대기하여 다른 호스트와의 연결이 불가능한 경우가 있습니다.

코드 예:

import socket

s = socket.socket()
host = socket.gethostname()
port = 1717
s.bind(("", port))

s.listen(5)
while True:
    c, addr = s.accept()
    print("Got connection ", addr)
    c.send("The Meeting is at 10 am")
    c.close()
import socket

s = socket.socket()
host = socket.gethostname()
port = 1717
s.bind(("", port))

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

출력:

Got connection('192.168.1.2')
The meeting is at 10 am

python server.py 명령을 실행하면 연결됨 메시지가 표시됩니다. 동시에 python client.py 명령을 실행하면 서버에서 메시지를 받게 됩니다.

DNS 확인은 이 문제의 다른 원인일 수 있습니다. socket.gethostname()이 호스트 이름을 반환하므로 운영 체제가 이를 로컬 주소로 변환할 수 없는 경우 오류가 반환됩니다.

Linux 운영 체제는 한 줄을 추가하여 호스트 파일을 편집할 수 있습니다.

host = socket.gethostname()
port = 1717
s.bind((host, port))

gethostbyname 사용

host = socket.gethostbyname("192.168.1.2")
s.bind((host, port))

따라서 클라이언트와 서버 측에서 동일한 기술을 사용하여 호스트에 액세스해야 합니다. 예를 들어, 클라이언트의 경우에 위에서 설명한 절차를 적용합니다.

로컬 호스트 이름 hostnamehost = socket.gethostname() 또는 로컬 호스트 host = socket.gethostbyname("localhost")의 특정 이름을 통해 액세스할 수도 있습니다.

host = socket.gethostname()
s.connect((host, port))
host = socket.gethostbyname("localhost")
s.connect((host, port))

결론

Python의 ConnectionRefusedError는 클라이언트가 서버에 연결할 수 없을 때 발생합니다. 몇 가지 이유에는 클라이언트가 IP 또는 포트 주소를 알지 못하거나 클라이언트가 연결을 원할 때 서버가 실행되지 않는 것이 포함됩니다.

이 연결 문제를 해결하기 위해 위에서 언급한 몇 가지 방법이 있습니다.

Zeeshan Afridi avatar Zeeshan Afridi avatar

Zeeshan is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.

LinkedIn

관련 문장 - Python Error