Pues no se pueden conectar mas de un cliente a la vez, si conecta uno, ese va bien pero si el segundo quiere entrar se queda esperando la confirmacion y hasta que el primero no se va no la recibe.
Este es el codigo de mi servidor
Código Python:
Ver original
HOST = '' PORT = int(options.serverport) s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind((HOST, PORT)) s.listen(1) conns=[s] lista_users = {} chat_room = {} while True: actius,x,y = select.select(conns,[],[]) for actual in actius: if actual == s: conn, addr = s.accept() print 'Conectado con ', addr conns.append(conn) ip = addr[0] conn.sendall('Conectado con exito') else: usuario = actual.recv(1024) if usuario not in lista_users: actual.sendall('User OK') puerto = actual.recv(1024) lista_users[usuario] = (ip,puerto) print lista_users actual.sendall('Que deseas hacer?') while True: data = actual.recv(1024) if not data: actual.close() print 'Cliente ',usuario,' desconectado' conns.remove(actual) del lista_users[usuario] break if data == ':LIST': actual.sendall('lista rooms')
no es todo el codigo lo que queda es un control de ordenes como el del LIST el problema es arriba.
este es el cliente:
Código Python:
Ver original
while True: data = conexion.recv(1024) print data if data == 'Conectado con exito': conexion.sendall(usuario) data = conexion.recv(1024) if data == 'User OK': print data conexion.sendall(puerto) data = conexion.recv(1024) if data == 'Que deseas hacer?': while data: prompt = raw_input('>') conexion.sendall(prompt) data = conexion.recv(1024) if data == 'lista rooms': print 'Rooms disponibles ',data elif data == 'Vuelva cuando quiera': print data conexion.close() sys.exit(0)
he llegado a la conclusion de que puede ser pk el inicio de conversacion esta muy establecido en accion-reaccion, osea lo que envia el servidor esta establecido asi y asi lo recibe el cliente, lo del User OK por ejemplo, pero no deberia ser por eso el fallo.
espero que me puedan ayudar pk llevo ya tiempo dandole vueltas a esto
muchas gracias