from socket import * import threading import thread def handler(clientsock,addr): while 1: data = clientsock.recv(BUFSIZ) if not data: break msg = 'echoed:... ' + data clientsock.send(msg) clientsock.close() if __name__=='__main__': HOST = 'localhost' PORT = 5005 BUFSIZ = 1024 ADDR = (HOST, PORT) serversock = socket(AF_INET, SOCK_STREAM) serversock.bind(ADDR) serversock.listen(2) while 1: print 'waiting for connection...' clientsock, addr = serversock.accept() print '...connected from:', addr thread.start_new_thread(handler, (clientsock, addr))
Я так понимаю что проблема в аварийном отключении или программы клиента или самого сервера. Правильно что порт остается занят? Искал долго и усердно, все говорят об “sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, server.getsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR) | 1)” но мне это ничего не дает, один клиент принимает пустое сообщение и второй клиент уже не подключается (как будто сервер отключен). Как решить эту проблему? Как в программе можно предотвратить аварийное отключение клиента? Как можно отключать сокет перед аварийным завершением программы? Как можно не аварийно завершить программу(там везде бесконечные циклы, не понимаю как можно реагировать на пользователя, ведь input останавливает программу)?