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 originalHOST = ''
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 originalwhile 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