dodałem linijkę:
if not data or data == "": break
pod: data = recv... cóż to rozwiązanie nie jest złe, nie spamuje mi już faktycznie, ale dlaczego nie wyłapuje socket.error, skoro nie ma już połączenia między klient-serwer ?
Kod serwera:
import socket, threading
class Server(object):
def __init__(self, host, port):
self.host = host
self.port = port
self.threads = []
self.clients = []
self.users = {}
self.server = None
def init_socket(self):
try:
self.server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.server.bind((self.host, self.port))
self.server.listen(5)
print 'Server startup(OK)!'
except socket.error, msg:
print "Cannot initialize socket:", msg
self.server.close()
return False
return True
def recv_data(self, client, addr):
running = True
while running:
try:
data = client.recv(1024)
if not data or data == "": break
print 'Data from %s: %s' % (self.users[addr[1]], data)
except socket.error:
print 'User %s disconnected' % self.users[addr[1]]
running = False
client.close()
client.close()
def turn_on(self):
running = True
user_count = 0
if not self.init_socket():
return False
while running:
client, addr = self.server.accept()
if client not in self.threads:
self.clients.append(client)
user_count += 1
self.users[addr[1]] = "user" + str(user_count)
print 'Connected with %s' % self.users[addr[1]]
self.threads.append(threading.Thread(target = self.recv_data, args = (client, addr)))
self.threads[user_count-1].start()
self.server.close()
if __name__ == "__main__":
theServer = Server("localhost", 12548)
theServer.turn_on()