Python

Send og modtag UDP-pakker via Python

Send og modtag UDP-pakker via Python
Vi kender allerede til to hovedtransportlagsprotokoller som TCP og UDP. For mere information om TCP og UDP kan du se referenceafsnittet.  I denne artikel vil vi lære at sende og modtage UDP-pakker ved hjælp af python-programmet.

Forventninger:

Her er nogle nøglepunkter, du kan lære af denne artikel

  1. Afsendelse af tekst ved hjælp af python-program, der bruger UDP-protokol.
  2. Modtagelse af tekst ved hjælp af python-program, der bruger UDP-protokol.
  3. Tjek UDP-pakke i Wireshark.
  4. Lær om python-kode til at sende og modtage UDP-pakker.

Generelt opsætningsdiagram:

System A og B skal kunne pinge hinanden.

Antagelser eller begrænsninger:

  1. Begge systemer skal have Linux med Ubuntu. Koden fungerer muligvis ikke på andre operativsystemer som Windows10, MAC osv.
  2. Begge systemer skal have python version 3. Denne kode fungerer muligvis ikke på python 2.7 version.

Bemærk: Du kan kontrollere referencen for at prøve Send og modtag UDP-pakker via Linux CLI, før du går efter python-filer til at udføre den samme opgave.

Python-filer:

Der er to python-filer server.py og klient.py. serverfil og klientfil skal være til stede i henholdsvis serversystem og klientsystem.

Server.py

importstik
importer sys
hvis len (sys.argv) == 3:
# Hent "IP-adresse til server" og også "portnummer" fra
argument 1 og argument 2
ip = sys.argv [1]
port = int (sys.argv [2])
andet:
print ("Kør som: python3-server.py ")
udgang (1)
# Opret et UDP-stik
s = stikkontakt.stikkontakt (stikkontakt.AF_INET, stikkontakt.SOCK_DGRAM)
# Bind stikket til porten
server_adresse = (ip, port)
s.bind (server_adresse)
udskriv ("Gør Ctrl + c for at afslutte programmet !!")
mens det er sandt:
print ("####### Server lytter #######")
data, adresse = s.recvfrom (4096)
udskriv ("\ n \ n 2. Server modtaget: ", data.afkode ('utf-8'), "\ n \ n")
send_data = input ("Indtast tekst, der skal sendes =>")
s.sendto (send_data.kode ('utf-8'), adresse)
udskriv ("\ n \ n 1. Server sendt: ", send_data," \ n \ n ")

Klient.py

importstik
importer sys
hvis len (sys.argv) == 3:
# Få "IP-adresse på serveren" og også "portnummeret" fra argument 1 og argument 2
ip = sys.argv [1]
port = int (sys.argv [2])
andet:
print ("Kør som: python3-klient.py ")
udgang (1)
# Opret stikkontakt til serveren
s = stikkontakt.stikkontakt (stikkontakt.AF_INET, stikkontakt.SOCK_DGRAM, 0)
udskriv ("Gør Ctrl + c for at afslutte programmet !!")
# Lad os sende data gennem UDP-protokol
mens det er sandt:
send_data = input ("Indtast en tekst, der skal sendes =>");
s.sendto (send_data.kode ('utf-8'), (ip, port))
udskriv ("\ n \ n 1. Klient sendt: ", send_data," \ n \ n ")
data, adresse = s.recvfrom (4096)
udskriv ("\ n \ n 2. Kunden modtaget: ", data.afkode ('utf-8'), "\ n \ n")
# luk stikket
s.tæt()

Send / modtag UDP-pakke:

Lad os tage et eksempel, som om vi sender UDP-pakke fra system A til system B. Så i server-klientkoncept er vi nødt til at køre server på System B-side og klient på System A-side.

Vi har også gyldige IP-adresser.

System A IP: 192.168.1.6
System B IP: 192.168.1.102

I modsætning til Send og modtag UDP-pakker via Linux CLI kører vi nu server.py i System, B [192.168.1.102] og så løber vi klient.py i System A [192.168.1.6].

Sådan køres server.py i 192.168.1.102?

Her er kommandoen til at køre serveren.py

$ python3-server.side 192.168.1.102 4444

Her er skærmbilledet

Her er der to argumenter for python-programmet. 1St argumentet er IP-adressen på selve serveren, her er dens 192.168.1.102 og 2nd argument er port, hvilken server der skal lytte, her har vi valgt 4444.

Sådan køres klient.py i 192.168.1.6?

Her er kommandoen til at køre klient.py

$ python3-klient.side 192.168.1.102 4444

Her er skærmbilledet

Her er der to argumenter for python-programmet. 1St argumentet er serverens IP-adresse, her er dens 192.168.1.102 og 2nd argument er port, hvor serveren kører. For vores eksempel er det 4444.

Send eller modtag tekst:

Nu som du kan se, er vi klar til at kommunikere mellem to systemer. Men vi skal først starte fra klienten. Lad os skrive noget i klienten og se, om det når ud til serveren eller ej.

Send data fra klient: “Jeg kommer fra klient”

Skærmbillede klient:

Nu skal denne klientmeddelelse komme til serveren. Her er serverens skærmbillede.

Nu kan vi se på serversiden, at vi også har mulighed for at sende noget til klienten. Lad os prøve det.

Send data fra klient: “Jeg kommer fra serveren”

Servers skærmbillede:

Og her er skærmbilledet på klientsiden.

Nu fortsætter dette uendelige tider, indtil vi stopper python-programmet ved hjælp af Ctrl + c.

Tjek UDP-pakke i Wireshark:

Nu har vi kommunikeret, men hvordan ved vi, at UDP blev brugt til at sende eller modtage disse pakker. Så vi kan kontrollere capture i Wireshark.

Lad os se pakken, når klient [192.168.1.6] sendte data ["Jeg kommer fra klient"] til server [192.168.1.6].

Kode forklaring:

For grundlæggende forklaring på pythonkode henvises til “Python Socket File Transfer Send” i referenceafsnittet.

Vi forklarer kun vigtige linjekoder til klient- og serverpython-filen. Der er nyttige kommentarer inde i klienten og serverkoden.

Klientkode forklaring:

hvis len (sys.argv) == 3:

Ovenstående linje kræves for at kontrollere, om brugeren har bestået obligatoriske argumenter. Ellers afsluttes programmet. Samme kontrol er der i serverprogrammet.

s = stikkontakt.stikkontakt (stikkontakt.AF_INET, stikkontakt.SOCK_DGRAM, 0)

Ovenstående linje er at oprette socketserver med UDP [SOCK_DGRAM] protokol. Samme kode er der på serveren.py.

mens det er sandt:

At køre program i uendelig løkke, indtil brugeren Ctrl + c. Samme kode er der på serveren.py.

s.sendto (send_data.kode ('utf-8'), (ip, port))

At sende data til nævnte ip og Havn nummer.

data, adresse = s.recvfrom (4096)

At modtage data, der kommer fra serveren. Samme kode er der på serveren.py.

Forklaring til serverkode:

s.sendto (send_data.kode ('utf-8'), adresse)

Send data til klientadresse.

Konklusion:

Vi kan sende eller modtage UDP-data ved hjælp af python-programmet. Internt bruger den serverklientmekanisme.

Referencer:

For at forstå TCP: https: // linuxhint.com / tcp_packet_capture_analysis /
For at forstå UDP: https: // linuxhint.com / udp_wireshark_analysis /
Send og modtag UDP-pakker via Linux CLI:
https: // linuxhint.com / send_receive_udp_packets_linux_cli /
Python Socket File Transfer Send:
https: // linuxhint.com / python_socket_file_transfer_send /

Sådan installeres og afspilles Doom på Linux
Introduktion til undergang Doom-serien opstod i 90'erne efter frigivelsen af ​​den originale Doom. Det var et øjeblikkeligt hit, og fra den tid af har...
Vulkan til Linux-brugere
Med hver nye generation af grafikkort ser vi spiludviklere skubbe grænserne for grafisk troskab og komme et skridt tættere på fotorealisme. Men på tro...
OpenTTD vs Simutrans
Oprettelse af din egen transportsimulering kan være sjovt, afslappende og ekstremt lokkende. Derfor skal du sørge for at prøve så mange spil som mulig...