Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: aangrymasther en 30 Noviembre 2017, 21:22 pm



Título: Problema chat en terminal con python
Publicado por: aangrymasther en 30 Noviembre 2017, 21:22 pm
Buenas, hoy traigo una duda que e me atormenta desde hace un tiempo. El caso es que estoy trabajando en un chat en el lenguaje python, este funciona "perfectamente" , para evitar tener que esperar una respuesta para poder enviar un mensaje utilice threads, de modo que cuando llega un thread escucha la llegada de mensajes mientras  que otro espera entradas del usuario.
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  :xD .

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()