s = socket.socket() #Nos conectamos al servidor con el metodo connect. Tiene dos parametros #El primero es la IP del servidor y el segundo el puerto de conexion s.connect(("127.0.0.1", 7071)) #Indice para que solo se realice el acuerdo de claves una vez por conexión i=1 #Creamos un bucle para retener la conexion while True: index = 0 if i==1: key = acuerdoClaves.dhe(s) i-=1 #Instanciamos una entrada de datos para que el cliente pueda enviar mensajes mensaje = input("Mensaje a enviar: ") envio = hashUtil.calculaHash(mensaje,key.__str__(),index) envio = (mensaje+'-'+envio).encode('utf-8') #Con la instancia del objeto servidor (s) y el metodo send, enviamos el mensaje introducido s.send(envio) answer = s.recv(1024) answer = answer.decode() if (answer == "Mensaje recibido integramente"): #print(answer) ctypes.windll.user32.MessageBoxW(0,answer, "Aviso", 0) if (answer == "Mensaje corrupto"): #print(answer) ctypes.windll.user32.MessageBoxW(0,answer, "Aviso", 0) #Si por alguna razon el mensaje es close cerramos la conexion if (mensaje == "close"): break
if i==1: key = acuerdoClaves.dhe(sc) i-=1 #Recibimos mensaje del cliente recibido = sc.recv(1024) recibido = recibido.decode() print(recibido) #Si el mensaje recibido es la palabra close se cierra la aplicacion if recibido == "close": break else: index = 0 mensaje = recibido.split('-') hashMensaje = hashUtil.calculaHash(mensaje[0],key.__str__(),index) if hashMensaje==mensaje[1]: ok = 'Mensaje recibido integramente' #Enviamos respuesta al cliente sc.send(ok.encode(encoding='utf_8', errors='strict')) else: corrupto = 'Mensaje corrupto' #Enviamos respuesta al cliente sc.send(corrupto.encode(encoding='utf_8', errors='strict')) #Escribimos en un fichero log los mensajes corruptos outfile = open('C:\\Users\\Irene\\Documents\\UNIVERSIDAD\\log.txt','a') outfile.write(time.strftime("%d/%m/%y")+' - '+ time.strftime("%H:%M:%S")+' '+corrupto+': '+mensaje[0]+'\r\n' ) mensaje = recibido index+=1 print ("Adios.")