Python

Send og motta UDP-pakker via Python

Send og motta UDP-pakker via Python
Vi vet allerede om to hovedtransportlagsprotokoller som TCP og UDP. For mer informasjon om TCP og UDP kan du sjekke referansedelen.  I denne artikkelen vil vi lære hvordan du sender og mottar UDP-pakker ved hjelp av python-programmet.

Forventninger:

Her er noen viktige punkter du kan lære av denne artikkelen

  1. Sende tekst ved hjelp av python-program som bruker UDP-protokoll.
  2. Motta tekst ved hjelp av python-program som bruker UDP-protokoll.
  3. Sjekk UDP-pakken i Wireshark.
  4. Lær om pythonkode for å sende og motta UDP-pakker.

Generelt oppsettdiagram:

System A og B skal kunne pinge hverandre.

Antakelser eller begrensninger:

  1. Begge systemene skal ha Linux med Ubuntu. Koden fungerer kanskje ikke på andre operativsystemer som Windows10, MAC osv.
  2. Begge systemene skal ha python versjon 3. Denne koden fungerer kanskje ikke på python 2.7 versjon.

Merk: Du kan sjekke referanse for å prøve å sende og motta UDP-pakker via Linux CLI før du går etter python-filer for å gjøre den samme oppgaven.

Python-filer:

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

Server.py

importkontakt
importer sys
hvis len (sys.argv) == 3:
# Få "IP-adresse til serveren" og også "portnummer" fra
argument 1 og argument 2
ip = sys.argv [1]
port = int (sys.argv [2])
ellers:
print ("Kjør som: python3 server.py ")
utgang (1)
# Opprett en UDP-kontakt
s = stikkontakt.stikkontakt (stikkontakt.AF_INET, stikkontakt.SOCK_DGRAM)
# Bind kontakten til porten
server_adresse = (ip, port)
s.bind (server_adresse)
skriv ut ("Gjør Ctrl + c for å avslutte programmet !!")
mens det er sant:
print ("######## Server lytter #######")
data, adresse = s.recvfrom (4096)
skriv ut ("\ n \ n 2. Server mottatt: ", data.dekode ('utf-8'), "\ n \ n")
send_data = input ("Skriv inn tekst som skal sendes =>")
s.sendto (send_data.kode ('utf-8'), adresse)
skriv ut ("\ n \ n 1. Server sendt: ", send_data," \ n \ n ")

Klient.py

importkontakt
importer sys
hvis len (sys.argv) == 3:
# Få "IP-adresse til serveren" og også "portnummeret" fra argument 1 og argument 2
ip = sys.argv [1]
port = int (sys.argv [2])
ellers:
print ("Kjør som: python3-klient.py ")
utgang (1)
# Opprett stikkontakt for serveren
s = stikkontakt.stikkontakt (stikkontakt.AF_INET, stikkontakt.SOCK_DGRAM, 0)
skriv ut ("Gjør Ctrl + c for å avslutte programmet !!")
# La oss sende data gjennom UDP-protokollen
mens det er sant:
send_data = input ("Skriv inn tekst som skal sendes =>");
s.sendto (send_data.kode ('utf-8'), (ip, port))
skriv ut ("\ n \ n 1. Client sent: ", send_data," \ n \ n ")
data, adresse = s.recvfrom (4096)
skriv ut ("\ n \ n 2. Kunden mottok: ", data.dekode ('utf-8'), "\ n \ n")
# lukk kontakten
s.Lukk()

Send / motta UDP-pakke:

La oss ta et eksempel som vi sender UDP-pakke fra system A til system B. Så, i server-klientkonsept, må vi kjøre server på System B-siden og klient på System A-siden.

Vi har også gyldige IP-adresser.

System A IP: 192.168.1.6
System B IP: 192.168.1.102

Nå i motsetning til Send og motta UDP-pakker via Linux CLI, kjører vi server.py i System, B [192.168.1.102] og så skal vi løpe klient.py i System A [192.168.1.6].

Hvordan kjøre server.py i 192.168.1.102?

Her er kommandoen for å kjøre serveren.py

$ python3-server.py 192.168.1.102 4444

Her er skjermbildet

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

Hvordan kjøre klient.py i 192.168.1.6?

Her er kommandoen for å kjøre klient.py

$ python3-klient.py 192.168.1.102 4444

Her er skjermbildet

Her er det to argumenter for python-programmet. 1St argumentet er IP-adressen til serveren, her er dens 192.168.1.102 og 2nd argumentet er porten der serveren kjører. For vårt eksempel er det 4444.

Send eller motta tekst:

Nå som du ser er vi klare til å kommunisere mellom to systemer. Men vi må først starte fra klienten. La oss skrive noe i klienten og se om det når ut til serveren eller ikke.

Send data fra klient: “Jeg kommer fra klient”

Skjermbilde skjema klient:

Nå skal denne klientmeldingen komme til serveren. Her er serverbildet.

Nå kan vi se på serversiden også at vi har muligheten til å sende noe til klienten. La oss prøve det.

Send data fra klient: “Jeg kommer fra serveren”

Servers skjermbilde:

Og her er skjermbildet på klientsiden.

Nå vil dette fortsette uendelig mange ganger til vi stopper pythonprogrammet ved hjelp av Ctrl + c.

Sjekk UDP-pakken i Wireshark:

Nå har vi gjort litt kommunikasjon, men hvordan blir vi kjent med at UDP ble brukt til å sende eller motta disse pakkene. Så vi kan sjekke fangst i Wireshark.

La oss se pakken når klient [192.168.1.6] sendte data ["Jeg kommer fra klient"] til serveren [192.168.1.6].

Kode forklaring:

For grunnleggende forklaring på pythonkode, se “Python Socket File Transfer Send” i referansedelen.

Vi vil bare forklare viktige linjekoder for klient- og serverpython-filen. Det er nyttige kommentarer inne i klienten og serverkoden.

Klientkode forklaring:

hvis len (sys.argv) == 3:

Ovennevnte linje er nødvendig for å sjekke om brukeren har bestått obligatoriske argumenter. Ellers avslutter programmet. Samme sjekk er der i serverprogrammet.

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

Ovennevnte linje er å lage sokkelserver med UDP [SOCK_DGRAM] protokoll. Samme kode er der på serveren.py.

mens det er sant:

Å kjøre programmet i uendelig løkke til brukeren gjør Ctrl + c. Samme kode er der på serveren.py.

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

Å sende data for nevnte ip og havn Nummer.

data, adresse = s.recvfrom (4096)

For å motta data som kommer fra serveren. Samme kode er der på serveren.py.

Forklaring av serverkode:

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

Send data til klientadressen.

Konklusjon:

Vi kan sende eller motta UDP-data ved hjelp av python-program. Internt bruker den serverklientmekanismen.

Referanser:

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

Hvordan vise OSD-overlegg i fullskjerm Linux-apper og spill
Å spille fullskjermspill eller bruke apper i distraksjonsfri fullskjermmodus kan avskrekke deg fra relevant systeminformasjon som er synlig i et panel...
Topp 5 spillfangstkort
Vi har alle sett og elsket streaming av spill på YouTube. PewDiePie, Jakesepticye og Markiplier er bare noen av de beste spillerne som har tjent milli...
Hvordan utvikle et spill på Linux
For et tiår siden ville ikke mange Linux-brukere forutsi at deres favorittoperativsystem en dag ville være en populær spillplattform for kommersielle ...