2015-09-14 2 views
0

Я новичок в программировании сокетов с потоками в python. У меня есть простое приложение сервера:Программирование сокетов Python с потоками

#!/usr/bin/python 
from socket import * 
from threading import Thread 
import _thread 

host = '' 
port = 52000 

sock = socket() 
sock.bind((host, port)) 
sock.listen(5) 
print "server is waiting for connections.." 
def clientthread(): 
    conn, addr = sock.accept() 
    print addr, "is connected" 
    conn.send('Hi! I am server\n') #send only takes string 
    #Receiving from client 
    data = conn.recv(1024) 
    print data 

for num in range(5): 
    Thread(target = clientthread).start() 

sock.close() 

Этот простой код отлично работает на 5 клиентов, и после этого, когда один выходит из и новый один хочет, чтобы связаться с сервером, то приложение просто закрывается. Но я хочу иметь 5 одновременных подключений, и как только кто-то выйдет из системы, одно клиентское пространство воссоздается для размещения нового (то есть пятого в настоящее время). Я считаю, что модуль потоковой передачи может помочь мне здесь. Его функции, такие как acquire() и release(). Но не знаете, как это сделать? Пожалуйста помоги.

ответ

0

Вы должны присоединиться к своим темам, прежде чем закрывать гнездо.
В настоящее время вы просто начинаете 5 потоков и закрываете серверный сокет сразу после.
Регистрация будет просто ждать, пока clientthread не вернется.

Python threading page

присоединиться ([Тайм-аут])
Подождите, пока поток не прекращается. Это блокирует вызывающий поток до тех пор, пока поток, чей метод join() не будет завершен - либо нормально, либо через необработанное исключение - или до тех пор, пока не произойдет дополнительный тайм-аут.

Смежные вопросы