2013-02-01 8 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() 

私は別のポートがないなどの6などを使用している場合は、それが正常に動作しています。 私はちょうど知りたかったのですが、どうすれば同じアプリケーションにポート80を使うことができますか?

+1

ポート80はHTTPプロトコル用に再設定されています。このポートでプロセスが実行されていないか確認してください。たぶん、いくつかのHTTPサーバー、Apacheのような? –

答えて

26

アクティビティモニタを開き、Pythonを検索してプロセスを終了します。あなたはたぶんサーバーを一度閉じることを邪魔しました。

3

他のアプリケーションがすでにこのポートにソケットをバインドしている場合、ポートをリッスンすることはできません。たとえば、読み取りsocket.bind

5

私の問題は、apacheが既にポート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 

その後、すべてがうまくいきます。

関連する問題