Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: WaAYa HaCK en 2 Agosto 2011, 03:54 am



Título: [Python] Salas de chat
Publicado por: WaAYa HaCK en 2 Agosto 2011, 03:54 am
Hola!
Estoy haciendo un sistema de salas de chat en Python y no avanzo  :(
Tengo un script que (en teoría) recibe los mensajes enviados por un usuario y los reenvía a todos los usuarios de la sala.
También tengo un script cliente.

Código
  1. #!/usr/bin/env python
  2. # -*- coding: cp1252 -*-
  3. import socket, sys
  4. print "### --- * --- Servidor del PyXat activat --- * --- ###"
  5. print "\n\n\n"
  6.  
  7. print "Creant objecte connector - socket..."
  8. try:
  9.    serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  10. except IOError:
  11.    print "Error: No s'ha pogut crear l'objecte principal socket!"
  12.    sys.exit(1)
  13. print "Objecte connector - socket principal creat ... OK"
  14.  
  15. print "Fixant objecte connector - socket..."
  16. try:
  17.    serv.bind(("localhost", 600))
  18. except socket.error:
  19.    print "Error: No s'ha pogut fixar l'objecte principal socket!"
  20.    sys.exit(1)
  21. print "Objecte connector - socket principal fixat ... OK"
  22.  
  23. try:
  24.    llist = int(input('Quantes connexions accepto? '))
  25. except ValueError:
  26.    print 'Indica un número!'
  27.    sys.exit(1)
  28. print 'Ok, creant ' , llist , ' espais de connexió...'
  29. serv.listen(llist)
  30. print llist , 'espais de connexió creats al xat   ... OK'
  31.  
  32. print "Creant sistema de connexió..."
  33. def conn():
  34.    enviar = socket.socket()
  35.    sv, addr = serv.accept()
  36.    con = socket.socket()
  37.    print addr , "s'ha connectat!"
  38.    host = addr[0]
  39.    port = addr[1]
  40.    while True:
  41.        msg = sv.recv(1024)
  42.        enviar.connect((host, port))
  43.        enviar.send(msg)
  44.        print msg
  45. print "Iniciant sistema de connexió..."
  46. conn()
  47.  

Y el script cliente:

Código
  1. #!/usr/bin/env python
  2. # -*- coding: cp1252 -*-
  3.  
  4. import socket
  5. print "Benvingut al PyXat!"
  6. nick = raw_input("Escriu el teu nick: ")
  7. sala = raw_input("Escriu la direcció d'una sala: ")
  8. c = socket.socket()
  9. c.connect((sala, 600))
  10. while 1:
  11.    dic = raw_input("> ")
  12.    c.send(nick)
  13.    c.send(dic)
  14.  

Y no me funciona (normal en mí  :P).

He probado también a usar dos sockets a la vez: uno para enviar y otro para recibir. En el script servidor, la lista addr consta de la dirección IP y de un puerto; he probado a usar addr[0] como dirección de conexión y addr[1] como puerto, pero no funciona. También he intentado añadir la lista addr a otra lista e iterar sobre cada elemento de ella con un for, pero no tengo muy claro cómo hacerlo.

Agradecería una mano en esto.

Saludos!


Título: Re: [Python] Salas de chat
Publicado por: Novlucker en 2 Agosto 2011, 14:22 pm
Sugerencia ;) ...
http://twistedmatrix.com/trac/

Saludos


Título: Re: [Python] Salas de chat
Publicado por: WaAYa HaCK en 5 Agosto 2011, 05:08 am
Perdón por tardar tanto, es que estoy de vacaciones.
Voy a mirar lo del Twisted, a ver si me aclaro.

Por curiosidad: qué he hecho mal en mi script? Hay forma de arreglarlo?

Gracias!