Pytonorm

Skicka och ta emot UDP-paket via Python

Skicka och ta emot UDP-paket via Python
Vi känner redan till två huvudtransportprotokoll som TCP och UDP. För mer information om TCP och UDP, se referensavsnittet.  I den här artikeln lär vi oss att skicka och ta emot UDP-paket med hjälp av python-programmet.

Förväntningar:

Här är några viktiga punkter som kan läsas från den här artikeln

  1. Skicka text med pythonprogram som använder UDP-protokoll.
  2. Ta emot lite text med python-program som använder UDP-protokoll.
  3. Kontrollera UDP-paketet i Wireshark.
  4. Lär dig mer om pythonkod för att skicka och ta emot UDP-paket.

Allmänt inställningsdiagram:

System A och B ska kunna pinga varandra.

Antaganden eller begränsningar:

  1. Båda systemen borde ha Linux med Ubuntu. Koden fungerar kanske inte i andra operativsystem som Windows10, MAC osv.
  2. Båda systemen ska ha pythonversion 3. Den här koden fungerar kanske inte på Python 2.7 version.

Obs: Du kan kontrollera referensen för att testa Skicka och ta emot UDP-paket via Linux CLI innan du går efter pythonfiler för att göra samma uppgift.

Python-filer:

Det finns två pythonfiler server.py och klient.py. serverfil och klientfil bör finnas i serversystem respektive klientsystem.

Server.py

importuttag
importera sys
om len (sys.argv) == 3:
# Få "IP-adress till servern" och även "portnummer" från
argument 1 och argument 2
ip = sys.argv [1]
port = int (sys.argv [2])
annan:
skriv ut ("Kör som: python3-server.py ")
utgång (1)
# Skapa ett UDP-uttag
s = uttag.uttag (uttag.AF_INET, uttag.SOCK_DGRAM)
# Binda uttaget till porten
server_adress = (ip, port)
s.binda (server_adress)
skriv ut ("Gör Ctrl + c för att avsluta programmet !!")
medan det är sant:
skriva ut ("####### Servern lyssnar #######")
data, adress = s.recvfrom (4096)
skriv ut ("\ n \ n 2. Server mottagen: ", data.avkoda ('utf-8'), "\ n \ n")
send_data = input ("Skriv text som ska skickas =>")
s.sendto (send_data.kod ('utf-8'), adress)
skriv ut ("\ n \ n 1. Server skickad: ", send_data," \ n \ n ")

Klient.py

importuttag
importera sys
om len (sys.argv) == 3:
# Få "IP-adress för servern" och även "portnummer" från argument 1 och argument 2
ip = sys.argv [1]
port = int (sys.argv [2])
annan:
print ("Kör som: python3-klient.py ")
utgång (1)
# Skapa uttag för server
s = uttag.uttag (uttag.AF_INET, uttag.SOCK_DGRAM, 0)
skriv ut ("Gör Ctrl + c för att avsluta programmet !!")
# Låt oss skicka data via UDP-protokollet
medan det är sant:
send_data = input ("Skriv text som ska skickas =>");
s.sendto (send_data.kod ('utf-8'), (ip, port))
skriv ut ("\ n \ n 1. Klient skickad: ", send_data," \ n \ n ")
data, adress = s.recvfrom (4096)
skriv ut ("\ n \ n 2. Kund mottagen: ", data.avkoda ('utf-8'), "\ n \ n")
# stäng uttaget
s.stänga()

Skicka / ta emot UDP-paket:

Låt oss ta ett exempel som att vi skickar UDP-paket från system A till system B. Så i server-klientkoncept måste vi köra server på System B-sidan och klient på System A-sidan.

Vi har också giltiga IP-adresser.

System A IP: 192.168.1.6
System B IP: 192.168.1.102

Nu till skillnad från Skicka och ta emot UDP-paket via Linux CLI kommer vi att köra server.py i System, B [192.168.1.102] och sedan kommer vi att springa klient.py i System A [192.168.1.6].

Hur man kör server.1922.168.1.102?

Här är kommandot för att köra servern.py

$ python3-server.192.168.1.102 4444

Här är skärmdumpen

Här finns två argument för pythonprogrammet. 1st argumentet är IP-adressen till själva servern, här är dess 192.168.1.102 och 2nd argumentet är port vilken server som ska lyssna, här har vi valt 4444.

Hur man kör klient.192.168.1.6?

Här är kommandot att köra klient.py

$ python3-klient.192.168.1.102 4444

Här är skärmdumpen

Här finns två argument för pythonprogrammet. 1st argumentet är serverns IP-adress, här är dess 192.168.1.102 och 2nd argument är port där servern körs. För vårt exempel är det 4444.

Skicka eller ta emot lite text:

Nu som du kan se är vi redo att kommunicera mellan två system. Men vi måste börja från klienten först. Låt oss skriva något i klienten och se om det når till servern eller inte.

Skicka data från klienten: “Jag kommer från klient”

Skärmdumpsklient:

Nu ska detta klientmeddelande komma till servern. Här är servern skärmdump.

Nu kan vi se på serversidan också att vi har möjlighet att skicka något till klienten. Låt oss prova det.

Skicka data från klienten: "Jag kommer från servern"

Servers skärmdump:

Och här är skärmdumpen på klientsidan.

Nu kommer detta att gå på oändliga tider tills vi stoppar pythonprogrammet med Ctrl + c.

Kontrollera UDP-paketet i Wireshark:

Nu har vi gjort lite kommunikation men hur får vi veta att UDP användes för att skicka eller ta emot dessa paket. Så vi kan kontrollera fångsten i Wireshark.

Låt oss se paketet när klient [192.168.1.6] skickade data ["Jag kommer från klient"] till servern [192.168.1.6].

Kodförklaring:

För grundläggande förklaring av pythonkod, se “Python Socket File Transfer Send” i referensavsnittet.

Vi kommer bara att förklara viktiga linjekoder för pythonfil för klient och server. Det finns användbara kommentarer inuti klienten och serverkoden.

Förklaring av klientkod:

om len (sys.argv) == 3:

Ovanstående rad krävs för att kontrollera om användaren har klarat obligatoriska argument. Annars avslutas programmet. Samma kontroll finns i serverprogrammet.

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

Ovanstående rad är att skapa sockelserver med UDP [SOCK_DGRAM] protokoll. Samma kod finns på servern.py.

medan det är sant:

För att köra program i oändlig slinga tills användaren gör Ctrl + c. Samma kod finns på servern.py.

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

För att skicka data för nämnda ip och hamn siffra.

data, adress = s.recvfrom (4096)

För att ta emot data som kommer från servern. Samma kod finns på servern.py.

Serverkodförklaring:

s.sendto (send_data.kod ('utf-8'), adress)

Skicka data till klientadress.

Slutsats:

Vi kan skicka eller ta emot UDP-data med hjälp av python-programmet. Internt använder den serverklientmekanismen.

Referenser:

För att förstå TCP: https: // linuxhint.com / tcp_packet_capture_analysis /
För att förstå UDP: https: // linuxhint.com / udp_wireshark_analysis /
Skicka och ta emot UDP-paket via Linux CLI:
https: // linuxhint.com / send_receive_udp_packets_linux_cli /
Python Socket File Transfer Skicka:
https: // linuxhint.com / python_socket_file_transfer_send /

Användbara verktyg för Linux-spelare
Om du gillar att spela spel på Linux är chansen att du kan ha använt appar och verktyg som Wine, Lutris och OBS Studio för att förbättra spelupplevels...
HD Remastered Games för Linux som aldrig tidigare hade en Linux-version
Många spelutvecklare och utgivare kommer med HD-remaster av gamla spel för att förlänga livstiden för franchisen, snälla fans som begär kompatibilitet...
Hur man använder AutoKey för att automatisera Linux-spel
AutoKey är ett verktyg för desktopautomatisering för Linux och X11, programmerat i Python 3, GTK och Qt. Med hjälp av dess skript och MACRO-funktional...