# Eloiza Sthefanny Rocha da Silva Cardoso GRR20235165 # Helen Kaori Iijima GRR20235160 import socket import json import sys from blockchain import * host = '0.0.0.0' porta = 5000 def iniciar_cliente(): try: cliente = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: cliente.connect((host, porta)) # cliente deve sempre ser executado depois do servidor except ConnectionRefusedError: print("Nao foi possivel conectar ao servidor. Verifique se ele esta ligado.") return # tenta iniciar a conta - so aceita quando os tipos de dados inseridos forem apropriados proprietario = input("Insira o nome do(a) proprietario(a): ") while True: valor = input("Insira o valor inicial da conta: ") try: float(valor) dados = { "acao" : "criar_conta", "proprietario" : proprietario, "valor_inicial" : valor } break except: print("ERRO: Valor invalido. Use apenas numeros.") continue # envia dados por socket dados_str = json.dumps(dados) cliente.sendall(dados_str.encode()) # espera confirmacao da criacao da conta resposta = json.loads(cliente.recv(1024).decode()) print(f"[Servidor] {resposta['mensagem']}\n") while True: # pega o comando desejado pelo usuario comando = input("Digite a operaƧao desejada:\n1 : Deposito\n2 : Saque\n3 : Ver Saldo\n4 : Sair\n>> ") dados = None # se o comando for uma transacao if comando in ['1', '2']: # verifica que tipo de transacao tipo = DEPOSITO if comando == '1' else SAQUE # pega valor da transacao valor = input("Digite o valor da transaƧao: ") try: float() dados = { "acao" : "transacao", "tipo" : tipo, "valor" : valor } # verifica se o valor eh numerico except ValueError: print("ERRO: Valor invalido. Use apenas numeros.") continue # se comando for ver saldo elif comando == '3': dados = {"acao": "ver_saldo"} # se comando for sair elif comando == '4': print("Sair") dados = {"acao": "sair"} cliente.sendall(json.dumps(dados).encode()) try: cliente.recv(1024) except: pass break # se o input for qualquer outro char diferente de 1, 2, 3 ou 4 else: print("Comando invalido.\n") continue # se tem dados, envia if dados: cliente.sendall(json.dumps(dados).encode()) try: # printa resposta do servidor resposta = json.loads(cliente.recv(1024).decode()) print(f"[Servidor] {resposta['mensagem']}\n") # caso tenha ocorrido algum erro no servidor except (ConnectionResetError, json.JSONDecodeError): print("Erro ao receber resposta do servidor. Ele pode ter caido.") break # fecha socket cliente.close() # caso de CTRL+C except KeyboardInterrupt: print("\nCliente interrompido (Ctrl+C).") try: cliente.close() except: pass