[PYTHON] 파이썬에서 "connection refused"오류가 발생하는 이유는 무엇입니까? (소켓)
PYTHON파이썬에서 "connection refused"오류가 발생하는 이유는 무엇입니까? (소켓)
나는 소켓에 대해 처음이야, 이해가 부족하다는 것을 완전히 용서해주십시오.
나는 서버 스크립트 (server.py)를 가지고있다 :
#!/usr/bin/python
import socket #import the socket module
s = socket.socket() #Create a socket object
host = socket.gethostname() #Get the local machine name
port = 12397 # Reserve a port for your service
s.bind((host,port)) #Bind to the port
s.listen(5) #Wait for the client connection
while True:
c,addr = s.accept() #Establish a connection with the client
print "Got connection from", addr
c.send("Thank you for connecting!")
c.close()
및 클라이언트 스크립트 (client.py) :
#!/usr/bin/python
import socket #import socket module
s = socket.socket() #create a socket object
host = '192.168.1.94' #Host i.p
port = 12397 #Reserve a port for your service
s.connect((host,port))
print s.recv(1024)
s.close
바탕 화면의 터미널로 이동하여 다음을 입력하여 스크립트를 시작합니다.
python server.py
그 후에, 나는 랩톱 단말기로 가서 클라이언트 스크립트를 시작한다.
python client.py
하지만 다음과 같은 오류가 발생합니다 :
나는 아무 소용이 다른 포트 번호를 사용하여 시도했다. 그러나 클라이언트 스크립트에서 동일한 IP 및 gethostname () 메소드를 사용하여 호스트 이름을 가져올 수 있었고 데스크탑 (서버)에 ping을 수행 할 수있었습니다.
해결법
-
==============================
1.대신에
대신에
host = socket.gethostname() #Get the local machine name port = 12397 # Reserve a port for your service s.bind((host,port)) #Bind to the port
너는 해봐야 해.
port = 12397 # Reserve a port for your service s.bind(('', port)) #Bind to the port
그래서 청취 소켓은 너무 제한되지 않습니다. 그렇지 않은 경우 수신은 로컬 네트워크와 관련이없는 하나의 인터페이스에서만 발생합니다.
하나의 예는 127.0.0.1만을 수신하므로 다른 호스트에서 연결할 수 없습니다.
-
==============================
2.이 오류는 어떤 이유로 클라이언트가 서버 스크립트를 실행중인 컴퓨터의 포트에 연결할 수 없음을 의미합니다. 이것은 목적지에 대한 라우팅 부족과 같은 몇 가지 문제로 인해 발생할 수 있지만 서버에 ping을 수행 할 수 있기 때문에 그렇게해서는 안됩니다. 다른 이유는 클라이언트와 서버 사이의 방화벽이 서버 자체 또는 클라이언트에있을 수 있기 때문일 수 있습니다. 귀하의 네트워크 주소 지정을 감안할 때, 나는 서버와 클라이언트가 모두 동일한 LAN에 있다고 가정하므로 트래픽을 차단할 수있는 라우터가 있어서는 안됩니다. 이 경우 다음을 시도해 보겠습니다.
이 오류는 어떤 이유로 클라이언트가 서버 스크립트를 실행중인 컴퓨터의 포트에 연결할 수 없음을 의미합니다. 이것은 목적지에 대한 라우팅 부족과 같은 몇 가지 문제로 인해 발생할 수 있지만 서버에 ping을 수행 할 수 있기 때문에 그렇게해서는 안됩니다. 다른 이유는 클라이언트와 서버 사이의 방화벽이 서버 자체 또는 클라이언트에있을 수 있기 때문일 수 있습니다. 귀하의 네트워크 주소 지정을 감안할 때, 나는 서버와 클라이언트가 모두 동일한 LAN에 있다고 가정하므로 트래픽을 차단할 수있는 라우터가 있어서는 안됩니다. 이 경우 다음을 시도해 보겠습니다.
그 결과를 저희에게 알려주십시오.
-
==============================
3.
host = socket.gethostname() # Get the local machine name port = 12397 # Reserve a port for your service s.bind((host,port)) # Bind to the port
이 오류는 DNS 확인과 관련이 있다고 생각합니다. 이 문장의 host = socket.gethostname ()은 호스트 이름을 얻지 만 운영 체제가 호스트 이름을 로컬 주소로 해석 할 수없는 경우 오류가 발생합니다. 리눅스 운영 체제는 / etc / hosts 파일을 수정하고 그 안에 한 줄을 추가 할 수 있습니다. 아래처럼 보입니다 ( 'hostname'은 socket.gethostname ()이 가진 것입니다).
127.0.0.1 hostname
-
==============================
4.터미널에서 다음 명령을 시도하십시오.
터미널에서 다음 명령을 시도하십시오.
sudo ufw enable ufw allow 12397
-
==============================
5.s = socket.socket ()이라고 가정합니다. 서버는 다음과 같은 방법으로 바인딩 될 수 있습니다. 방법 1 :
s = socket.socket ()이라고 가정합니다. 서버는 다음과 같은 방법으로 바인딩 될 수 있습니다. 방법 1 :
host = socket.gethostname() s.bind((host, port))
방법 2 :
host = socket.gethostbyname("localhost") #Note the extra letters "by" s.bind((host, port))
방법 3 :
host = socket.gethostbyname("192.168.1.48") s.bind((host, port))
클라이언트 측에서 똑같은 메소드를 정확하게 사용하지 않으면, 에러가 발생합니다 : socket.error errno 111 connection refused.
따라서 서버에서와 마찬가지로 클라이언트 측에서 정확히 동일한 방법으로 호스트를 가져와야합니다. 예를 들어 클라이언트의 경우 다음과 같은 방법을 사용합니다.
방법 1 :
host = socket.gethostname() s.connect((host, port))
방법 2 :
host = socket.gethostbyname("localhost") # Get local machine name s.connect((host, port))
방법 3 :
host = socket.gethostbyname("192.168.1.48") # Get local machine name s.connect((host, port))
희망이 문제를 해결합니다.
-
==============================
6.host = socket.gethostname () 대신 server.py 파일의 make : host = '192.168.1.94'
host = socket.gethostname () 대신 server.py 파일의 make : host = '192.168.1.94'
from https://stackoverflow.com/questions/16130786/why-am-i-getting-the-error-connection-refused-in-python-sockets by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] AttributeError : 'datetime'모듈에 'strptime'속성이 없습니다. (0) | 2018.10.19 |
---|---|
[PYTHON] 2D 배열 파이썬의 길이 찾기 (0) | 2018.10.19 |
[PYTHON] numpy float : 산술 연산에 내장 된 것보다 10 배 느린가? (0) | 2018.10.18 |
[PYTHON] Python datetime strptime () 및 strftime () : 표준 시간대 정보 보존 방법 (0) | 2018.10.18 |
[PYTHON] 정확히 PYTHONPATH에 무엇을 설정해야합니까? (0) | 2018.10.18 |