Python:多线程程序udp

时间:2017-11-25 18:57:52

标签: python multithreading dictionary server client

我有这个程序客户端和服务器在udp,单线程。任何人都可以帮助我在多线程中进行转换吗? (这个代码中有葡萄牙语因为我是巴西人哈哈) (客户端和服务器都在回答中)

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分:0)

客户:

导入套接字 MAX_BYTES = 65535 而真:

    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