ConnectionRefusedError: [Errno 111] 연결 거부됨
-
Python에서
ConnectionRefusedError: [Errno 111] 연결 거부
가 발생하는 이유 -
Python에서
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 is a detail oriented software engineer that helps companies and individuals make their lives and easier with software solutions.
LinkedIn관련 문장 - Python Error
- AttributeError 수정: Python에서 'generator' 객체에 'next' 속성이 없습니다.
- AttributeError 해결: 'list' 객체 속성 'append'는 읽기 전용입니다.
- AttributeError 해결: Python에서 'Nonetype' 객체에 'Group' 속성이 없습니다.
- AttributeError: 'Dict' 객체에 Python의 'Append' 속성이 없습니다.
- AttributeError: 'NoneType' 객체에 Python의 'Text' 속성이 없습니다.
- AttributeError: Int 객체에 속성이 없습니다.