Python - ¿Donde está el error?

 
Vista:

¿Donde está el error?

Publicado por carcaharas (4 intervenciones) el 09/04/2007 19:07:31
Hola estoy intentando programar un chat en python (aunque me está costando dios y ayuda...) bueno despues de mucho buscar y buscar he conseguido encontrar algo de código e irlo juntando para que funcione, pero me hace una cosa muy rara, cuando desde un cliente veo lo que escribe otro me muestra letra a letra. Me explico: Si un cliente escribe "hola" a mi en el otro cliente se me ve algo así: [127.0.0.1 :1234] H 127.0.0.1 :1234]O 127.0.0.1 :1234]L 127.0.0.1 :1234] A

Por otro lado yo he codificado un cliente y un servidor pero para poder ver el chat en funiconamineto solo lo he conseguido empleadndo únicamente el servidor y haciendo que el cliente sea un telnet ¿Como puedo hacerlo para utilizar tambien el cliente y ejecutarlo normal desde el eclipse?, no se si me entendeis pero bueno esto es secundario. Os pego el código:

<<<EL SERVIDOR>>>
import socket
import select

def accept_new_connection():

try:
global server
global desc
newsock, (remhost, remport) = server.accept()
server.settimeout(.1)
print "Se ha conectado %s:%s" % (str(remhost), str(remport))
desc.append(newsock)
except:
pass

def broadcast(msg, sock):

global desc
global server
host, port = sock.getpeername()
msg = "[%s:%s]: %s" % (str(host), str(port), str(msg))
for destsock in desc:
if destsock != sock and destsock != server:
destsock.send(msg)

def get_msg(sock):

try:
msg = sock.recv(1024)
sock.settimeout(.1)
return msg
except:
global desc
host, port = sock.getpeername()
print "[%s:%s] ha salido." % (str(host), str(port))
desc.remove(sock)
return None


global server
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("", 8003))
server.listen(5)
global desc
desc = [server]
while 1:
accept_new_connection()
(sread, swrite, sexc) = select.select(desc, [], [])
for sock in sread:
if sock != server:
flag = get_msg(sock)
if flag:
broadcast(flag, sock)

<<<EL CLIENTE>>>>
mport sys
import socket
import select
import threading

class obj_tel(object):

def __init__(self):

self.client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
print "Give me the Host or IP address: ",
self.tmp = str(sys.stdin.readline())
self.host = ''
for self.i in self.tmp:
if self.i != '\n':
self.host += self.i
self.flag = 0
self.port = ''
while self.flag == 0:
print "\nGive me the port number: ",
self.tmp = str(sys.stdin.readline())
try:
self.port = int(self.tmp)
self.flag = 1
except ValueError:
print "\nPort number can't contain strings.\n"
try:
self.client.connect((self.host, self.port))
print "\nConnection successfully made.\n"
except:
print "\nCan't connect.\n"
sys.stdin.readline()
self.exit_client()
self.telnet()

def telnet(self):

self.opt = [self.client]
self.msg = ''
while 1:
(self.rlist, self.wlist, self.xlist) = select.select(self.opt,
[], [], .9)
if self.rlist != []:
print "%s" % (str(self.client.recv(1024)), )
else:
self.slp = threading.Thread(target = self.get_data)
self.slp.start()

def get_data(self):
self.tmp = str(sys.stdin.readline())
self.msg = ''
for self.i in self.tmp:
if self.i != '\n':
self.msg += self.i
self.client.send(self.msg)

def exit_client(self):
raise SystemExit

if __name__ == "__main__":
telnet = obj_tel()


ESPERO QUE ME PODAIS AYUDAR. GRACIAS
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

copia esto

Publicado por cristian (1 intervención) el 21/04/2009 00:54:21
CLIENTE:(NO COPIES ESTO.. YA KE LE PUSE PA DIFERENCIAR)

import socket

host = "localhost"
port = 9999

s = socket.socket()
s.connect (host, port)

while True:
line = raw_input("> ")
s.send(line)
if line == "QUIT":
break
s.close()


SERVER: (NO COPIES ESTO.. YA KE LE PUSE PA DIFERENCIAR)

import socket

class Server():

# Constructor de la clase
def __init__(self):
self.host = "lacalhost"
self.port = 9999
self.maxcon = 5

#metodo de la clase (crea socket, bind scucha)
def run(self):
self.server = socket.socket()
self.server.bind(self.host, self.port)
self.server.listen(self.maxcon)
while True:
c = Client(self.server.accept())
c.run()
#Aqui termina la clase __init__

class Client():

def __init__(self, (client, address)):
self.client = client
self.address = address
self.size = 1024

def run(self):
while True:
mensaje = se.f-client.recv(se.f.size)
if mensaje == "QUIT":
break
print mensaje

#Aqui termina la clase

if __name__ == "__main__":
s = Server()
s.run
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar