Test Foro de elhacker.net SMF 2.1

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 (python) [Seleccionar]
#!/usr/bin/env python
# -*- coding: cp1252 -*-
import socket, sys
print "### --- * --- Servidor del PyXat activat --- * --- ###"
print "\n\n\n"

print "Creant objecte connector - socket..."
try:
    serv = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except IOError:
    print "Error: No s'ha pogut crear l'objecte principal socket!"
    sys.exit(1)
print "Objecte connector - socket principal creat ... OK"

print "Fixant objecte connector - socket..."
try:
    serv.bind(("localhost", 600))
except socket.error:
    print "Error: No s'ha pogut fixar l'objecte principal socket!"
    sys.exit(1)
print "Objecte connector - socket principal fixat ... OK"

try:
    llist = int(input('Quantes connexions accepto? '))
except ValueError:
    print 'Indica un número!'
    sys.exit(1)
print 'Ok, creant ' , llist , ' espais de connexió...'
serv.listen(llist)
print llist , 'espais de connexió creats al xat   ... OK'

print "Creant sistema de connexió..."
def conn():
    enviar = socket.socket()
    sv, addr = serv.accept()
    con = socket.socket()
    print addr , "s'ha connectat!"
    host = addr[0]
    port = addr[1]
    while True:
        msg = sv.recv(1024)
        enviar.connect((host, port))
        enviar.send(msg)
        print msg
print "Iniciant sistema de connexió..."
conn()


Y el script cliente:

Código (python) [Seleccionar]
#!/usr/bin/env python
# -*- coding: cp1252 -*-

import socket
print "Benvingut al PyXat!"
nick = raw_input("Escriu el teu nick: ")
sala = raw_input("Escriu la direcció d'una sala: ")
c = socket.socket()
c.connect((sala, 600))
while 1:
    dic = raw_input("> ")
    c.send(nick)
    c.send(dic)


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!