import select, socket, sys host = '' port = 9999 serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM) serv.bind((host,port)) serv.listen(5) serv.setblocking(0) nicks = {} msgs = {} def disconnect(sk): output.remove(sk) input.remove(sk) nicks.pop(sk) msgs.pop(sk) def get_nick(sk): global nicks nick = sk.recv(65).strip() test = nicks.values() if nick in test: print "Nick existe, escriba uno nuevo\n" return None else: nicks[sk] = nick sk.send("Bienvenido %s!\n" % (nick)) def get_msg(sk): global nicks #sk.send("\nMSG: ") data = sk.recv(512) nicke = nicks[sk] if data == '': msg = 'None\n' else: msg = "<%s> %s\n" % (nicke, data.strip()) for a in msgs: if a != sk: msgs[sk] += msg else: pass def send_buf(sk): try: if msgs[sk] != "": cont = sk.send(msgs[sk]) if cont < 0: disconnect(sk) return msgs[sk] = msgs[sk][cont:] except: pass input = [ serv ] output = [] while 1: a,b,c = select.select(input,output , []) for i in a: if i == serv: run = 1 conn, addr = serv.accept() conn.setblocking(0) conn.send("Nick :") input.append(conn) output.append(conn) nicks[conn] = None msgs[conn] = "" #while run: #dar = conn.recv(1) #if str(dar.strip()) == "1": # run = 0 # nicks[conn] = None # msgs[conn] = "" # input.append(conn) # output.append(conn) #else: # pass else: if nicks[i] == None: get_nick(i) else: i.send("MSG: ") get_msg(i) for i in b: send_buf(i)