from socket import * import threading import thread import sys def stopAll(): for i in workerClientList: workerClientList[i].stop() reader.stop() class WorkerReader(threading.Thread): def __init__(self): super(WorkerReader,self).__init__() self._stop = threading.Event() self.daemon = True def run(self): for line in sys.stdin: if (int(line) == 11): stopAll() def stop(self): self._stop.set() class WorkerClient(threading.Thread): def __init__(self, clientsock, addr): super(WorkerClient,self).__init__() self._stop = threading.Event() self.daemon = True self.clientsock = clientsock self.addr = addr def run(self): while 1: data = clientsock.recv(BUFSIZ) if not data: break msg = 'echoed:... ' + data clientsock.send(msg) clientsock.close() def stop(self): clientsock.close() self._stop.set() workerClientList = [] HOST = 'localhost' PORT = 5013 BUFSIZ = 1024 ADDR = (HOST, PORT) serversock = socket(AF_INET, SOCK_STREAM) serversock.bind(ADDR) serversock.listen(2) reader = WorkerReader() reader.start() while 1: print 'waiting for connection...' clientsock, addr = serversock.accept() print '...connected from:', addr newWorkerClient = WorkerClient(clientsock, addr) workerClientList.append(newWorkerClient) newWorkerClient.start()
Создаю экземпляр WorkerReader, он вроде бы должен проверять строки на наличие числа 11, если да, то закончить программу, а он все равно продолжает работать. Так же перестает работать сам сервер, то есть или клиент получает пустой ответ от эхо сервера, или он вообще не может подключиться, подсмотрел все это дело тут. Все это надо что бы аккуратно отключать сервер, иначе у меня остается занят порт. Помогите пожалуйста!
PS: почему как бы я не делал
import sys for line in sys.stdin: if line == 'exit': exit() else: print 'echo', line