2016-09-01 66 views
0

視頻講座的示例。背景:講師給出了python中最簡單的web服務器。他創建了一個套接字,將其綁定,監聽,接受連接,接收數據並以大寫形式將其發送回客戶端。然後他說有一個缺點:這個Web服務器是單線程的。然後讓我們分叉。Python中的多線程網絡服務器

我不能很好地理解這個例子。但首先,程序退出(sys.exit())。但我無法再運行它:

socket.error:[Errno 98]地址已被使用。

我試圖找出哪個進程正在偵聽端口8080:netstat --listen | grep 8080.沒什麼。

那麼,什麼是聽8080?如何殺死它?

後來補充: 有一種感覺,如果我等待一段時間(5-10分鐘),我可以再次運行該程序。

import os 
import socket 
import sys 


server_socket = socket.socket() 
server_socket.bind(('', 8080)) 
server_socket.listen(10) 
print "Listening" 


while True: 
    client_socket, remote_address = server_socket.accept() 
    print "PID: {}".format(os.getpid()) 
    child_pid = os.fork() 
    print "child_pid {}".format(child_pid) 

    if child_pid == 0:  
     request = client_socket.recv(1024) 
     client_socket.send(request.upper()) 
     print '(child {}): {}'.format(client_socket.getpeername(), request) 
     client_socket.close() 
     sys.exit() 
    else: 
     client_socket.close() 

server_socket.close() 
+0

嘗試'netstat -tulnp | grep 8080' – citaret

+0

它沒有幫助。嘗試通過sudo。順便說一句,我在問題上加了一點(請看看「稍後添加」)。 – Michael

+0

這可能有助於:http://hea-www.harvard.edu/~fine/Tech/addrinuse.html – acw1668

回答

0

正確netstat的用法是:

netstat -tanp 

,因爲你需要的-a選項來顯示監聽套接字。添加grep以快速找到您的程序:

netstat -tanp| grep 8080