2017-11-25 237 views
-2

我有這個程序客戶端和服務器在udp,單線程。任何人都可以幫助我在多線程中進行轉換嗎? (有葡萄牙在這個代碼,因爲我是巴西人笑) (客戶端和服務器都在答案)Python:多線程程序udp

+1

您不使用類似的答案。 把它放在你的問題。 –

回答

1

服務器:

def server(): 
    sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 

    sock.bind(('127.0.0.1', 9999)) 

    print('Escutando em {}'.format(sock.getsockname())) 

    while True: 

     rec, address = sock.recvfrom(MAX_BYTES) 

     text = rec.decode('utf-8') 

     if text == "Inserir": 
      # recebe uma palavra e um signficado 

      termo_inserir, end = sock.recvfrom(1024) 

      significado, end = sock.recvfrom(1024) 

      termo_inserir = termo_inserir.decode('utf-8') 

      significado = significado.decode('utf-8') 

      # insere a palvra e sig no dicionário 

      Mat[termo_inserir] = significado 

     if text == 'Excluir': 
      termo_excluir, end = sock.recvfrom(1024) 

      termo_excluir = termo_excluir.decode('utf-8') 

      del Mat[termo_excluir] 

     if text == "Consultar": 

      men_cons, end = sock.recvfrom(1024) 

      men_cons = men_cons.decode('utf-8') 

      # consulta no dic 

      if men_cons in Mat: 

       resposta = Mat[men_cons] 

       sock.sendto(resposta.encode('utf-8'), end) 

      else: 

       sock.sendto("Termo não encontrado. Tente inserir.".encode("utf-8"), end) 
     if text == 'Editar': 

      termo_excluir, end = sock.recvfrom(1024) 

      termo_excluir = termo_excluir.decode('utf-8') 
      if termo_excluir in Mat: 


       del Mat[termo_excluir] 

       significado, end = sock.recvfrom(1024) 

       significado = significado.decode('utf-8') 

       Mat[termo_excluir] = significado 

       sock.sendto(("Significado do termo: " + termo_excluir + " foi alterado para: "+ significado).encode("utf-8"), end) 
      else: 
       sock.sendto(("Termo: " + termo_excluir + " não existe no dicionário. Tente inserir.").encode("utf-8"), end) 

if __name__ == '__main__': 

     while True: 

      listen_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
      listen_sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) 
      listen_sock.bind(('127.0.0.1', 9999)) 
      addr = listen_sock.getsockname() 

      # Thread roda a funcao handle_client() de forma autonoma 
      # e concorrente dentro do loop 
      thread = threading.Thread(target=server, 
             args=[], 
             daemon=True) 
      thread.run() 
      print('Conexão de {}'.format(addr)) 
+0

這包含一個錯誤♂️ – jovss25

0

客戶:

進口插座 MAX_BYTES = 65535 而True:

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 

    print("*****************************************\n" 

      "Dicionário Termos Matemáticos \n" 

      "*****************************************") 

    text = str(input("---------------------------------\n" 

        "Para consulta, digite: Consultar\n" 

        "Para inserir, digite: Inserir\n" 

        "Para editar, digite: Editar \n" 

        "Para excluir, digite: Excluir\n" 

        "Para sair, digite: Sair\n" 

        "---------------------------------\n" 

        "O que você deseja fazer?\n" 

        )) 

    end = ('127.0.0.1', 9999) 

    sock.sendto(text.encode("utf-8"), end) 

    if text == 'Inserir': 

     x = str(input("Digite o termo a ser inserido:\n")) 

     y = str(input("Digite o significado do termo a ser inserido: \n")) 

     sock.sendto(x.encode("utf-8"), end) 

     sock.sendto(y.encode("utf-8"), end) 

     print("Termo", x, "foi inserido. Seu significado é: ", y) 

    elif text == 'Excluir': 

     x = str(input("Digite o termo a ser excluido:\n")) 

     sock.sendto(x.encode("utf-8"), end) 

     print("Termo", x, "foi excluído.\n") 

    elif text == 'Consultar': 

     text = str(input("Digite o termo a ser procurado: \n")) 

     i = text.encode('utf-8') 

     sock.sendto(i, end) 

     i, address = sock.recvfrom(MAX_BYTES) 

     text = i.decode('utf-8') 

     print("Significado: " + text + "\n") 

    elif text == 'Editar': 

     x = str(input("Digite o termo a ser editado: \n")) 

     sock.sendto(x.encode("utf-8"), end) 

     y = str(input("Digite o significado do termo a ser editado: \n")) 

     sock.sendto(y.encode('utf-8'), end) 

     significado, end = sock.recvfrom(1024) 

     significado = significado.decode('utf-8') 
     print(significado) 

    elif text == 'Sair': 

     print("Você acabou por aqui. Até a próxima.") 

     break