2013-02-01 9 views
9

मैक ओएस एक्स वातावरण में सॉकेट प्रोग्रामिंग का उपयोग करके नमूना बनाने के लिए मैं ट्यूटोरियल http://www.raywenderlich.com/3932/how-to-create-a-socket-based-iphone-app-and-server का अनुसरण कर रहा हूं।पायथन मोड़ रिएक्टर - पता पहले से ही उपयोग में है

मैं रिएक्टर.listenTCP (80, कारखाना) के लिए पोस्ट 80 का उपयोग कर लिख रहा हूं। जब मैं server.py फ़ाइल को चलाने, एक त्रुटि हो रही है:

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. 

स्रोत कोड का पालन है:

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 प्रोटोकॉल के लिए reserverd है। जांचें कि क्या इस बंदरगाह पर चल रही प्रक्रिया नहीं है। शायद कुछ HTTP सर्वर, जैसे apache? –

उत्तर

26

ओपन गतिविधि मॉनिटर, पायथन की खोज करें और प्रक्रिया को मार दें। आप शायद एक बार सर्वर बंद करने के साथ गड़बड़ कर दिया।

3

यदि आप किसी अन्य एप्लिकेशन को पहले से ही इस पोर्ट पर सॉकेट कर चुके हैं तो आप पोर्ट नहीं सुन सकते हैं। उदाहरण के लिए socket.bind

5

मेरे लिए यह मुद्दा था कि अपाचे पहले से ही पोर्ट 80 पर सुन रहा था। ऐसा लगता है कि इस मुद्दे के साथ बहुत से लोग इस पोस्ट के माध्यम से और अन्य लोगों को इस मुद्दे के साथ Google पर क्लिक करते हैं लेकिन मुझे यह विशेष उत्तर नहीं दिया गया है। यह मेरे लिए काम करता था इसलिए मैंने सोचा कि अगर इसमें मदद मिलती है तो मैं इसे जोड़ दूंगा: मैक/मैवरिक्स चल रहा है लेकिन यह समस्या किसी भी अन्य सिस्टम पर होगी जहां अपाचे डिफ़ॉल्ट रूप से चलता है ... या कोई इसे चल रहा है भूल सकता है।

sudo lsof -i TCP:80 | grep LISTEN 

क्या मिल गया

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 

और सर्वर है कि के बाद पोर्ट 80 पर ठीक काम किया।

+0

यह पता चलता है कि कौन सी प्रक्रियाएं सुन रही हैं। यह आईएमएचओ का सबसे अच्छा जवाब है। – 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 

फिर सब कुछ अच्छी तरह से चला जाता है।

संबंधित मुद्दे