El problema llega en el momento en el que se recibe un mensaje y se imprime en pantalla, porque el input lo recoge como una entrada, de forma que si el usuario esta escribiendo se le añade al mensaje recibido al que estaba escribiendo.
¿Se os ocurre alguna forma de solucionar esto?
PD: E pensado en interfaces gráficas, pero no me hacen mucha gracia .
Gracias de antemano.
Código:
Código:
import socket
import threading
import sys
from Crypto.Cipher import AES
print ""*100
s = socket.socket(socket.AF_INET , socket.SOCK_STREAM)
try:
s.connect(("localhost" , 12345))
except:
print "[!] El servidor no esta operativo"
sys.exit(1)
clave = s.recv(1024)
if len(clave) != 16:
print "[!] Problema con el cifrado"
else:
cipher = AES.new(clave)
print chr(27)+"[0;35m"+" Chat prueba"
print chr(27)+"[0;37m"+""
def send():
while True:
mensaje = raw_input(chr(27)+"[1;34m")
if mensaje == "exit":
print "Alguien a salido"
s.send(cipher.encrypt("/exit"*16))
sys.exit(1)
else:
s.send(cipher.encrypt((usuario+":"+mensaje)*16))
def recv():
clave = s.recv(1024)
while True:
print chr(27)+"[1;32m"
mensaje_decrypt = ""
recivido = cipher.decrypt(s.recv(1024))
for x in range(len(recivido)/16):
mensaje_decrypt += recivido[x]
print mensaje_decrypt.rjust(100)
usuario = raw_input("cual es tu usuario:")
s.send(cipher.encrypt(usuario))
z = threading.Thread(target=recv)
c = threading.Thread(target=send)
z.start()
c.start()