2013-02-01 16 views
9

Sto seguendo un tutorial http://www.raywenderlich.com/3932/how-to-create-a-socket-based-iphone-app-and-server per creare un esempio utilizzando la programmazione socket in ambiente Mac OS X.Reattore twistato Python - indirizzo già in uso

Sto scrivendo utilizzando il post 80 per reactor.listenTCP (80, factory). Quando eseguo il file server.py, ottenendo un errore:

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. 

Il codice sorgente è la seguente:

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() 

Se sto utilizzando un altro porto non come 6 ecc, si sta lavorando bene . Volevo solo sapere, come posso usare la porta 80 per la stessa applicazione.

+1

La porta 80 è riservata per il protocollo HTTP. Controlla se non è in corso il processo su questa porta. Forse qualche server HTTP, come l'apache? –

risposta

26

Aprire Activity Monitor, cercare Python e terminare il processo. Probabilmente hai sbagliato a chiudere un server una volta.

3

Non è possibile ascoltare la porta se un'altra applicazione ha già collegato il socket a questa porta. Ad esempio leggere socket.bind

5

Per me il problema era che Apache stava già ascoltando sulla porta 80. Sembra che molte persone google attraverso questo post e altri con questo problema, ma non vedo questa risposta particolare offerto. Era quello che ha funzionato per me, quindi ho pensato di aggiungerlo nel caso in cui aiuti: Eseguire Mac/Mavericks ma il problema si presenterebbe su qualsiasi altro sistema in cui Apache viene eseguito per impostazione predefinita ... o si potrebbe dimenticare che è in esecuzione.

Forse

sudo lsof -i TCP:80 | grep LISTEN 

Got

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) 

fatto

sudo apachectl stop 

e il server ha lavorato bene sulla porta 80 dopo.

+0

Questo trova i processi in ascolto. Questa è la migliore risposta IMHO. – mareoraft

7

Ho riscontrato anche questo problema, in realtà, proprio ora.

Ecco quello che ho fatto:

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 

Poi tutto va bene.

Problemi correlati