Pitão

Envie e receba pacotes UDP via Python

Envie e receba pacotes UDP via Python
Já sabemos sobre dois protocolos de camada de transporte principais, como TCP e UDP. Para obter mais informações sobre TCP e UDP, você pode verificar a seção de referência.  Neste artigo, aprenderemos como enviar e receber pacotes UDP usando o programa python.

Expectativas:

Aqui estão alguns pontos-chave que podem ser aprendidos com este artigo

  1. Enviar algum texto usando o programa python que usa o protocolo UDP.
  2. Recebendo algum texto usando o programa python que usa o protocolo UDP.
  3. Verifique o pacote UDP no Wireshark.
  4. 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:

  1. Ambos os sistemas devem ter Linux com Ubuntu. O código pode ou não funcionar em outro sistema operacional como Windows10, MAC etc.
  2. 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ção
import 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ção
import 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.6
IP 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 4444

Aqui 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 4444

Aqui 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 /

Tutorial de Battle for Wesnoth
The Battle for Wesnoth é um dos jogos de estratégia de código aberto mais populares que você pode jogar no momento. Este jogo não está apenas em desen...
0 A.D. Tutorial
Dos muitos jogos de estratégia que existem, 0 A.D. consegue se destacar como um título abrangente e um jogo muito profundo e tático, apesar de ser de ...
Tutorial Unity3D
Introdução ao Unity 3D Unity 3D é um poderoso motor de desenvolvimento de jogos. É uma plataforma cruzada que permite criar jogos para celular, web, d...