2013-02-10 1 views
0

현재 동일한 컴퓨터에서 클라이언트와 서버를 모두 사용할 때 올바르게 작동하는 기본 LAN 소켓 서버를 만들려고합니다. . 두 대의 컴퓨터 (Mac 및 Windows)에서 클라이언트와 서버를 사용하려고하면 클라이언트 측에서 일관되게 연결이 거부됩니다. 여기에 내가 내 Mac에있어 오류가 내 창문에Python 2.7.3을 사용하여 오류 61 (Mac) 및 오류 10061 (Windows)을 수정하는 방법

Traceback (most recent call last): 
File "/Users/*****/Desktop/Client V2.py", line 31, in <module> 
s.connect((host, port)) 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", 
line 224, in meth 
return getattr(self._sock,name)(*args) 
error: [Errno 61] Connection refused 

저도 같은 오류를했다가, 단지 수는 달랐다. 들어오는 연결과 나가는 연결 모두에 대해 Windows 방화벽을 해제했으며 실제 문제가 무엇인지 혼란 스럽습니다.

try: 
    remote_ip = socket.gethostbyname(host) 

except socket.gaierror: 
    #could not resolve 
    print "Hostname could not be resolved. Exiting" 
    sys.exit() 
:

클라이언트

#Get host and port info to connect 
host = 'localhost' 
port = input ("What is the PORT number?") 

나는이 라인 아마도 그들은 문제의 근본 원인이며, 필요한 경우 확실하지 않다 : 여기 내 포트했다 코드입니다

마지막으로 연결하는 실제 코드입니다. ((호스트, 포트))

서버 s.connect (I 소켓 s라고 함)

HOST = 'localhost' #Symbolic name meaning all available interfaces 

PORT = input ("Enter the PORT number (1 - 10,000)") 
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
print "Socket Created" 

try: 
    s.bind((HOST, PORT)) 
except socket.error, msg: 
    print "Bind failed. Error Code : " + str(msg[0]) + " Message " + str(msg[1]) 
    sys.exit() 
print "Socket Bind Complete" 


s.listen(10) 
print "Socket now listening" 

내가 정말 바보 같은 짓을했다고 확신하지만, 누군가가 나에게 알려 주시기 바랍니다 수있는 내 실수는 (또는 이것이 가능한 cross-os 인 경우). 이미 here을 게시했지만 아무도 응답하지 않았습니다. 거기에 몇 가지 다른 질문이 있습니다. 누군가 대답을 시도 할 수 있다면 좋을 것입니다.

+0

로컬 호스트가 서로 다른 두 대의 컴퓨터에서 작동하는 이유는 무엇입니까? –

답변

1
HOST = 'localhost' #Symbolic name meaning all available interfaces 

"모든 사용 가능한 인터페이스"를 의미하는 것이 아니라 동일한 컴퓨터에서 실행되는 프로그램에서만 볼 수있는 특수 인터페이스를 통해 로컬 컴퓨터 만 의미합니다.

HOST = '0.0.0.0' #Symbolic name meaning all available interfaces 

은 사용 가능한 모든 네트워크 인터페이스를 의미합니다. 물론 특정 네트워크 인터페이스에 바인딩 할 수도 있습니다.이 경우 필드에 IP 주소 만 입력하면됩니다.

+0

주석과 호스트 이름을 변경했습니다. 왜'0.0.0.0'은 심볼릭 이름이고'localhost'가 아닙니다. 그건 상관 없니? "모든 사용 가능한 인터페이스"는 무엇을 의미합니까? 도와 주셔서 감사합니다! – xxmbabanexx

+2

그들은 관습에 따라 그렇게합니다. 사용 가능한 모든 인터페이스는 컴퓨터가 둘 이상의 네트워크 인터페이스를 가질 수 있음을 의미합니다 (예 : 최신 서버 클래스 컴퓨터는 종종 4 개의 이더넷 인터페이스를 가짐). 모든 인터페이스 (0.0.0.0으로 표시)에 서비스를 바인딩하는 것이 항상 바람직한 것은 아닙니다. 컴퓨터에 내부 네트워크를 제공하는 별도의 인터페이스가 있고 인터넷을 통해 계정 서버에 액세스 할 수 있다고 말하는 것을 원하지 않는다고 가정하면 공용 웹 사이트를 둘 다 사용할 수 있기를 원합니다. 따라서 모든 인터페이스 또는 특정 인터페이스에 바인딩 할 수 있습니다. – fvu

+0

저는 이것이 코드가 항상'localhost'를 지정하고 OP는 두 컴퓨터 사이에서 통신하려고 할 때 그의 코드가 작동하지 않는다고 불평하는 또 다른 문제를 놓친다 고 생각합니다. –