2016-09-01 2 views
0

Пример из видео-лекции. Предыстория: преподаватель дал простейший веб-сервер в python. Он создал сокет, связал его, прослушал, принял соединение, получил данные и отправил обратно клиенту в верхнем регистре. Затем он сказал, что есть недостаток: этот веб-сервер является однопоточным. Тогда давайте развить.Многопоточный веб-сервер в 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

Это не поможет. Пробовал через судо. Кстати, я добавил немного к вопросу (пожалуйста, взгляните на «Добавлено позже»). – Michael

+0

Это может помочь: http://hea-www.harvard.edu/~fine/Tech/addrinuse.html – acw1668

ответ

0

Правильное использование NetStat является:

netstat -tanp 

потому, что вам нужна опция -a для отображения сокеты. Добавьте grep, чтобы быстро найти вашу программу:

netstat -tanp| grep 8080 
Смежные вопросы