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