2013-02-01 23 views
9

Tôi đang làm theo hướng dẫn http://www.raywenderlich.com/3932/how-to-create-a-socket-based-iphone-app-and-server để tạo mẫu bằng cách sử dụng lập trình socket trong môi trường Mac OS X.Lò phản ứng xoắn bằng Python - địa chỉ đã sử dụng

Tôi đang viết bằng cách sử dụng bài 80 cho reactor.listenTCP (80, nhà máy). Khi tôi chạy file server.py, nhận được một lỗi:

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. 

Mã nguồn như sau:

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

Nếu tôi đang sử dụng một cổng không như 6 vv, nó đang làm việc tốt . Tôi chỉ muốn biết, làm cách nào tôi có thể sử dụng cổng 80 cho cùng một ứng dụng.

+1

Cổng 80 là máy chủ lưu trữ cho giao thức HTTP. Kiểm tra nếu không có quá trình chạy trên cổng này. Có lẽ một số máy chủ HTTP, như apache? –

Trả lời

26

Giám sát hoạt động mở, tìm kiếm Python và hủy quá trình. Có thể bạn đã nhầm lẫn với việc đóng một máy chủ một lần.

3

Bạn không thể nghe cổng nếu ứng dụng khác đã kết nối ổ cắm với cổng này. Ví dụ: đọc socket.bind

5

Đối với tôi vấn đề là apache đã nghe trên cổng 80. Có vẻ như rất nhiều người google thông qua bài đăng này và những người khác có vấn đề này nhưng tôi không thấy câu trả lời cụ thể này được cung cấp. Đó là những gì làm việc cho tôi vì vậy tôi nghĩ rằng tôi sẽ thêm vào nó trong trường hợp nó giúp: Chạy Mac/Mavericks nhưng vấn đề sẽ xảy ra trên bất kỳ hệ thống nào khác mà Apache chạy theo mặc định ... hoặc có thể quên nó đang chạy.

Did

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) 

đã

sudo apachectl stop 

Và máy chủ chỉ làm việc tốt trên cổng 80 sau đó.

+0

Điều này tìm thấy những gì các quá trình đang lắng nghe. Đây là câu trả lời hay nhất IMHO. – mareoraft

7

Tôi đã gặp sự cố này, thực sự, ngay bây giờ.

Dưới đây là những gì tôi đã làm:

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 

Sau đó, mọi việc suôn sẻ.

Các vấn đề liên quan