2017-09-06 18 views
0

파이썬 소켓을 사용하여 로깅 목적으로 서버에 연결하고 있습니다. 서버의 IP 주소는 x.x.x.x입니다 (나는 단지 이것을 숨기고, x은 0에서 255까지의 숫자가 될 수 있음). 내 도메인 이름은 www.example.domain.com 일 수 있습니다. 이 x.x.x.x www.example.domain.com/etc/hosts에 넣고 sudo 액세스로 작성했습니다. 그러나, 내 프로그램에서 도메인 이름을 사용하려고하면 python 소켓이 도메인 이름을 확인하지 못했습니다.왜 파이썬 소켓에서 도메인 이름을 확인할 수 없습니까?

import socket 

mysocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM) 
'''Block of code''' 
mysocket.sendto('Hello!', 'www.example.domain.com') 
mysocket.close() 

여기에서 오류 메시지는 다음과 같습니다 나는 일반 텍스트 호스트 이름과 같은 testLoggerwww.example.domain.com을 변경하는 경우

socket.gaierror: [Errno 8] nodename nor servname provided, or not known

, 파이썬 소켓 것을 확인할 수있다. 내 컴퓨터에서 도메인 이름을 ping 수 있습니다, 그래서 난 그냥 왜 파이썬 소켓이 시나리오에서 도메인 이름을 확인할 수 없는지 궁금하네요.

당신은 IP 소켓 sendto() 프리미티브 UDP 소켓을 사용하고 있습니다 :

+0

오류가 무엇을? –

+0

'socket.gethostbyname ('www.example.domain.com')'을 할 때 어떻게됩니까? – birryree

+0

업데이트 된 코드에서 sendto()의 주소는 튜플이 아닌 문자열이며 포트 번호도 누락되어 있습니다. –

답변

2

코드는 몇 가지 실수가 있습니다. 또한 address 매개 변수의 형식이 잘못되었습니다. 일반적으로 튜플 (호스트 이름, 포트)입니다.

그래서, 중 적절한 UDP 소켓 생성 : 대신

mysocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
mysocket.sendto(b'data', ('hostname', 9999)) 

또는 사용 connect + send/sendall :

mysocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
mysocket.connect(('hostname', 9999)) 
mysocket.sendall(b'data') 
+0

좋아, 또 다른 일반적인 질문은,'python3 socket'이 기본적으로 도메인 이름을 해석 할 수 있습니까? –

+0

python2와 3 사이에는 차이가 없습니다. –

+0

예, 일반적으로 소켓 API 호출이 처리되는 운영 체제 수준에서 처리되므로이 작업을 수행합니다 –