Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/02/2010, 08:27
polmadur
 
Fecha de Ingreso: enero-2010
Mensajes: 49
Antigüedad: 14 años, 3 meses
Puntos: 0
Problema con multiconexion

Buenas, vereis estoy programando un pequeño chat, de momento es la version mas simple, pues el servidor necesita aceptar multiples conexiones, he cogido un programa parecido que tengo y he cogido la estructura para crear la multiconexion, he cambiado un par de cosas que son las funciones del chat..
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
  1. HOST = ''
  2. PORT = int(options.serverport)
  3. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  4. s.bind((HOST, PORT))
  5.  
  6. s.listen(1)
  7. conns=[s]
  8.  
  9. lista_users = {}
  10. chat_room = {}
  11.  
  12. while True:
  13.     actius,x,y = select.select(conns,[],[])
  14.     for actual in actius:
  15.         if actual == s:
  16.             conn, addr = s.accept()
  17.             print 'Conectado con ', addr
  18.             conns.append(conn)
  19.             ip = addr[0]
  20.             conn.sendall('Conectado con exito')    
  21.            
  22.         else:
  23.             usuario = actual.recv(1024)
  24.             if usuario not in lista_users:         
  25.                 actual.sendall('User OK')
  26.                 puerto = actual.recv(1024)
  27.                 lista_users[usuario] = (ip,puerto)
  28.                 print lista_users
  29.                 actual.sendall('Que deseas hacer?')
  30.                 while True:                        
  31.                     data = actual.recv(1024)
  32.                     if not data:
  33.                         actual.close()
  34.                         print 'Cliente ',usuario,' desconectado'
  35.                         conns.remove(actual)
  36.                         del lista_users[usuario]
  37.                         break                      
  38.                        
  39.                     if data == ':LIST':
  40.                         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
  1. while True:
  2.     data = conexion.recv(1024)     
  3.     print data
  4.     if data == 'Conectado con exito':  
  5.         conexion.sendall(usuario)
  6.         data = conexion.recv(1024)
  7.         if data == 'User OK':          
  8.             print data
  9.             conexion.sendall(puerto)
  10.             data = conexion.recv(1024)
  11.             if data == 'Que deseas hacer?':
  12.                 while data:
  13.                     prompt = raw_input('>')
  14.                     conexion.sendall(prompt)
  15.                     data = conexion.recv(1024)
  16.                    
  17.                     if data == 'lista rooms':
  18.                         print 'Rooms disponibles ',data
  19.                    
  20.                    
  21.                     elif data == 'Vuelva cuando quiera':
  22.                         print data
  23.                         conexion.close()
  24.                         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