2013-02-01 6 views
9

Mac OS X 환경에서 소켓 프로그래밍을 사용하여 샘플을 만드는 방법은 http://www.raywenderlich.com/3932/how-to-create-a-socket-based-iphone-app-and-server입니다.Python twisted reactor - 주소가 이미 사용 중입니다.

reactor.listenTCP (80, 공장)에 80이라는 글을 쓰고 있습니다.

File "server.py", line 10, in <module> 
    reactor.listenTCP(6, factory) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/posixbase.py", line 436, in listenTCP 
    p.startListening() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/twisted/internet/tcp.py", line 641, in startListening 
    raise CannotListenError, (self.interface, self.port, le) 
twisted.internet.error.CannotListenError: Couldn't listen on any:80: [Errno 48] Address already in use. 

소스 코드는 다음과 같다 : 오류를 받고 난 server.py 파일을 실행 ,

from twisted.internet.protocol import Factory, Protocol 
from twisted.internet import reactor 

class IphoneChat(Protocol): 
    def connectionMade(self): 
     self.factory.clients.append(self) 
     print "clients are ", self.factory.clients 

    def connectionLost(self, reason): 
     self.factory.clients.remove(self) 

factory = Factory() 
factory.protocol = IphoneChat 
factory.clients = [] 
reactor.listenTCP(80, factory) 
print "Iphone Chat server started" 
reactor.run() 

내가 다른 포트 없음을 추천 등을 사용하고 있다면, 그것은 잘 작동 . 방금 ​​알고 싶었던 동일한 응용 프로그램에 포트 80을 어떻게 사용할 수 있습니까?

+1

포트 80은 HTTP 프로토콜 용으로 다시 설정됩니다. 이 포트에서 프로세스가 실행 중인지 확인하십시오. Apache 같은 일부 HTTP 서버일까요? –

답변

26

활동 모니터 열기, 파이썬 검색 및 프로세스 종료. 한 번 서버를 닫으면 어쩌면 엉망이됩니다.

3

다른 응용 프로그램이 이미이 포트에 소켓을 바인딩 한 경우 포트를 수신 대기 할 수 없습니다. 예를 들어, 읽기 socket.bind

5

나를 위해 문제는 아파치가 이미 포트 80에서 청취하고있는 것이 었습니다.이 문제와 관련하여 많은 사람들이 Google과 같은 것처럼 보이지만이 특정 답변은 제공되지 않습니다. 그것은 나를 위해 일한 것이므로 도움이 될 경우를 대비해 추가 할 것이라고 생각했습니다. Mac/Mavericks를 실행하지만 Apache가 기본적으로 실행되는 다른 시스템에서 문제가 발생하거나 실행 중임을 잊어 버릴 수도 있습니다.

httpd  20 root 4u IPv6 0x1d12a12e12345b12  0t0 TCP *:http (LISTEN) 
httpd  109 _www 4u IPv6 0x1d12a12e12345b12  0t0 TCP *:http (LISTEN) 
httpd  437 _www 4u IPv6 0x1d12a12e12345b12  0t0 TCP *:http (LISTEN) 
httpd  438 _www 4u IPv6 0x1d12a12e12345b12  0t0 TCP *:http (LISTEN) 
httpd  439 _www 4u IPv6 0x1d12a12e12345b12  0t0 TCP *:http (LISTEN) 

sudo apachectl stop 

했다있어

sudo lsof -i TCP:80 | grep LISTEN 

을했고, 서버는 그 후 포트 80에서 잘 작동했다.

+0

이것은 청취중인 프로세스를 찾습니다. 이것은 IMHO의 가장 좋은 답변입니다. – mareoraft

7

실제로이 문제가 발생했습니다. 여기

내가 무슨 짓을 :

MacBook-Air:Desktop user$ sudo lsof -i:80 
COMMAND PID USER FD TYPE    DEVICE SIZE/OFF NODE NAME 
Python 1276 root 3u IPv4 ******  0t0 TCP *:http (LISTEN) 
MacBook-Air:Desktop user$ sudo kill 1276 
MacBook-Air:Desktop user$ sudo python server.py 
Iphone Chat server started 

는 그런 모든 것이 잘 어울린다.

관련 문제