2016-09-01 7 views
0

Ein Beispiel aus einer Videovorlesung. Hintergrund: Der Dozent gab einen einfachen Webserver in Python. Er erstellte einen Socket, verband ihn, machte Zuhören, akzeptierte eine Verbindung, empfing Daten und schickte sie in Großbuchstaben an den Client zurück. Dann sagte er, dass es einen Nachteil gibt: Dieser Webserver ist single-threaded. Dann lass uns abzweigen.Multithread-Webserver in Python

Ich kann das Beispiel nicht gut genug verstehen. Aber zuerst wird das Programm beendet (sys.exit()). Aber ich kann es nicht noch einmal ausführen:

socket.error: [Errno 98] Adresse bereits verwendet.

Ich versuche herauszufinden, welcher Prozess auf Port 8080 hört: netstat --listen | Grep 8080. Nichts.

Nun, was hört auf 8080? Und wie man es tötet?

später hinzugefügt: Es ist ein Gefühl, dass, wenn ich für einige Zeit warten (etwa 5-10 Minuten), ich das Programm wieder laufen kann.

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

Versuchen Sie 'netstat -tulnp | grep 8080' – citaret

+0

Es hilft nicht. Durch Sudo versucht. Übrigens habe ich der Frage ein wenig hinzugefügt (siehe "Später hinzugefügt"). – Michael

+0

Dies kann helfen: http://hea-www.harvard.edu/~fine/Tech/addrinuse.html – acw1668

Antwort

0

Die richtige netstat Nutzung ist:

netstat -tanp 

, weil Sie die -a Option benötigen Steckdosen hören anzuzeigen. Fügen Sie grep hinzu, um Ihr Programm schnell zu finden:

netstat -tanp| grep 8080