Expectativas:
Aqui estão alguns pontos-chave que podem ser aprendidos com este artigo
- Enviar algum texto usando o programa python que usa o protocolo UDP.
- Recebendo algum texto usando o programa python que usa o protocolo UDP.
- Verifique o pacote UDP no Wireshark.
- Aprenda sobre o código python para enviar e receber pacotes UDP.
Diagrama de configuração geral:
Os sistemas A e B devem ser capazes de pingar um ao outro.
Suposições ou limitações:
- Ambos os sistemas devem ter Linux com Ubuntu. O código pode ou não funcionar em outro sistema operacional como Windows10, MAC etc.
- Ambos os sistemas devem ter python versão 3. Este código pode ou não funcionar em python 2.Versão 7.
Nota: Você pode verificar a referência para experimentar Enviar e receber pacotes UDP via Linux CLI antes de ir para os arquivos Python para fazer a mesma tarefa.
Arquivos Python:
Existem dois arquivos python servidor.py e cliente.py. o arquivo do servidor e o arquivo do cliente devem estar presentes no sistema do servidor e no sistema do cliente, respectivamente.
Servidor.py
soquete de importaçãoimport sys
se len (sys.argv) == 3:
# Obtenha o "endereço IP do servidor" e também o "número da porta" de
argumento 1 e argumento 2
ip = sys.argv [1]
porta = int (sys.argv [2])
senão:
print ("Executar como: servidor python3.py
saída (1)
# Crie um soquete UDP
s = socket.socket (socket.AF_INET, soquete.SOCK_DGRAM)
# Ligue o soquete à porta
server_address = (ip, porta)
s.vincular (server_address)
print ("Pressione Ctrl + C para sair do programa !!")
enquanto verdadeiro:
print ("######## O servidor está escutando #######")
dados, endereço = s.recvfrom (4096)
imprimir ("\ n \ n 2. O servidor recebeu: ", dados.decodificar ('utf-8'), "\ n \ n")
send_data = input ("Digite algum texto para enviar =>")
s.sendto (send_data.codificar ('utf-8'), endereço)
imprimir ("\ n \ n 1. Servidor enviado: ", send_data," \ n \ n ")
Cliente.py
soquete de importaçãoimport sys
se len (sys.argv) == 3:
# Obtenha o "endereço IP do servidor" e também o "número da porta" do argumento 1 e do argumento 2
ip = sys.argv [1]
porta = int (sys.argv [2])
senão:
print ("Executar como: cliente python3.py
saída (1)
# Criar soquete para o servidor
s = socket.socket (socket.AF_INET, soquete.SOCK_DGRAM, 0)
print ("Pressione Ctrl + C para sair do programa !!")
# Vamos enviar dados através do protocolo UDP
enquanto verdadeiro:
send_data = input ("Digite algum texto para enviar =>");
s.sendto (send_data.encode ('utf-8'), (ip, porta))
imprimir ("\ n \ n 1. Cliente enviado: ", send_data," \ n \ n ")
dados, endereço = s.recvfrom (4096)
imprimir ("\ n \ n 2. O cliente recebeu: ", dados.decodificar ('utf-8'), "\ n \ n")
# feche o soquete
s.perto()
Enviar / receber pacote UDP:
Vamos dar um exemplo como enviaremos um pacote UDP do Sistema A para o Sistema B. Portanto, no conceito de cliente-servidor, temos que executar o servidor no lado do Sistema B e o cliente no lado do Sistema A.
Também temos endereços IP válidos.
IP do sistema A: 192.168.1.6IP do sistema B: 192.168.1.102
Agora, ao contrário de enviar e receber pacotes UDP via Linux CLI, vamos executar servidor.py no sistema, B [192.168.1.102] e então iremos executar cliente.py no Sistema A [192.168.1.6].
Como executar o servidor.py em 192.168.1.102?
Aqui está o comando para executar o servidor.py
servidor $ python3.py 192.168.1.102 4444Aqui está a imagem
Aqui existem dois argumentos para o programa python. 1st argumento é o endereço IP do próprio servidor, aqui é 192.168.1.102 e 2WL o argumento é a porta que o servidor estará escutando, aqui nós escolhemos 4444.
Como executar o cliente.py em 192.168.1.6?
Aqui está o comando para executar o cliente.py
cliente $ python3.py 192.168.1.102 4444Aqui está a imagem
Aqui existem dois argumentos para o programa python. 1st o argumento é o endereço IP do servidor, aqui é 192.168.1.102 e 2WL o argumento é a porta onde o servidor está rodando. Para nosso exemplo é 4444.
Envie ou receba algum texto:
Agora, como você pode ver, estamos prontos para nos comunicarmos entre dois sistemas. Mas precisamos começar do cliente primeiro. Vamos digitar algo no cliente e ver se chega ao servidor ou não.
Envie dados do cliente: “Eu sou do cliente”
Cliente do formulário de captura de tela:
Agora, esta mensagem do cliente deve chegar ao servidor. Aqui está a captura de tela do servidor.
Agora podemos ver no lado do servidor também temos a opção de enviar algo para o cliente. Vamos tentar isso.
Envie dados do cliente: “Eu sou do Servidor”
Captura de tela do servidor:
E aqui está a captura de tela do lado do cliente.
Agora, isso vai continuar infinitas vezes até que paremos o programa python usando Ctrl + c.
Verifique o pacote UDP no Wireshark:
Já fizemos alguma comunicação, mas como sabemos que o UDP foi usado para enviar ou receber esses pacotes. Então, podemos verificar a captura no Wireshark.
Vamos ver o pacote quando o cliente [192.168.1.6] enviou dados [“Eu sou do cliente”] para o servidor [192.168.1.6].
Explicação do código:
Para obter uma explicação básica do código python, consulte “Envio de transferência de arquivo de soquete Python” na seção de referência.
Explicaremos apenas os códigos de linhas importantes para o arquivo python do cliente e do servidor. Existem comentários úteis dentro do código do cliente e do servidor.
Explicação do código do cliente:
se len (sys.argv) == 3:A linha acima é necessária para verificar se o usuário passou os argumentos obrigatórios obrigatórios. Ou então o programa irá sair. A mesma verificação existe no programa do servidor.
s = socket.socket (socket.AF_INET, soquete.SOCK_DGRAM, 0)A linha acima é para criar um servidor de socket com UDP [SOCK_DGRAM] protocolo. O mesmo código está lá no servidor.py.
enquanto verdadeiro:Para executar o programa em loop infinito até que o usuário pressione Ctrl + c. O mesmo código está lá no servidor.py.
s.sendto (send_data.encode ('utf-8'), (ip, porta))Para enviar dados para os mencionados ip e porta número.
dados, endereço = s.recvfrom (4096)Para receber qualquer dado proveniente do servidor. O mesmo código está lá no servidor.py.
Explicação do código do servidor:
s.sendto (send_data.codificar ('utf-8'), endereço)Envie dados para o endereço do cliente.
Conclusão:
Podemos enviar ou receber dados UDP usando o programa python. Internamente, ele usa o mecanismo do cliente servidor.
Referências:
Para entender o TCP: https: // linuxhint.com / tcp_packet_capture_analysis /
Para entender o UDP: https: // linuxhint.com / udp_wireshark_analysis /
Envie e receba pacotes UDP via Linux CLI:
https: // linuxhint.com / send_receive_udp_packets_linux_cli /
Envio de transferência de arquivo de soquete Python:
https: // linuxhint.com / python_socket_file_transfer_send /