Piton

UDP csomagok küldése és fogadása Pythonon keresztül

UDP csomagok küldése és fogadása Pythonon keresztül
Két fő szállítási réteg protokollról, például a TCP-ről és az UDP-ről már tudunk. A TCP-ről és az UDP-ről további információt a referencia szakaszban talál.  Ebben a cikkben megtudhatjuk, hogyan küldhetünk és fogadhatunk UDP csomagokat a python program segítségével.

Elvárások:

Íme néhány kulcsfontosságú pont, amelyeket ebből a cikkből megismerhet

  1. Néhány szöveg küldése az UDP protokollt használó python program segítségével.
  2. Szöveg fogadása UDP protokollt használó python program segítségével.
  3. Ellenőrizze az UDP csomagot a Wiresharkban.
  4. További információ az UDP csomagok küldésére és fogadására szolgáló python kódról.

Általános beállítási diagram:

Az A és B rendszernek képesnek kell lennie egymás pingelésére.

Feltételezések vagy korlátozások:

  1. Mindkét rendszernek Linuxosnak kell lennie Ubuntuval. Előfordulhat, hogy a kód nem működik más operációs rendszereken, például Windows10, MAC stb.
  2. Mindkét rendszernek python 3-as verzióval kell rendelkeznie. Lehet, hogy ez a kód nem működik a python 2-n.7 verzió.

Megjegyzés: Ellenőrizheti az UDP-csomagok küldésének és fogadásának Linux CLI-n keresztüli kipróbálásának referenciáját, mielőtt a python fájlokat ugyanazt a feladatot látná el.

Python fájlok:

Két python fájl van szerver.py és ügyfél.py. A szerver fájlnak és az ügyfél fájlnak jelen kell lennie a szerver rendszerben, illetve az ügyfél rendszerben.

szerver.py

import aljzat
import sys
ha len (sys.argv) == 3:
# Szerezze be a "szerver IP-címét" és a "port számát" innen
1. és 2. érv
ip = sys.argv [1]
port = int (sys.argv [2])
más:
print ("Futtatás, mint: python3 szerver.py ")
kilépés (1)
# Hozzon létre egy UDP foglalatot
s = aljzat.aljzat (aljzat.AF_INET, aljzat.SOCK_DGRAM)
# Csatlakoztassa az aljzatot a porthoz
szerver_cím = (ip, port)
s.kötés (szerver_cím)
print ("A Ctrl + c billentyűkombinációval léphet ki a programból !!")
míg True:
nyomtatás ("####### A szerver hallgatja #######")
adatok, cím = s.visszahívás (4096)
print ("\ n \ n 2. A szerver megkapta: ", data.dekódolás ('utf-8'), "\ n \ n")
send_data = input ("Írjon be néhány szöveget a küldéshez =>")
s.sendto (send_data.kódolás ('utf-8'), cím)
print ("\ n \ n 1. Szerver elküldve: ", send_data," \ n \ n ")

Ügyfél.py

import aljzat
import sys
ha len (sys.argv) == 3:
# Szerezze be a "kiszolgáló IP-címét", valamint a "portszámot" az 1. és a 2. érvből
ip = sys.argv [1]
port = int (sys.argv [2])
más:
print ("Futtatás, mint: python3 kliens.py ")
kilépés (1)
# Socket létrehozása a szerverhez
s = aljzat.aljzat (aljzat.AF_INET, aljzat.SOCK_DGRAM, 0)
print ("A Ctrl + c billentyűkombinációval léphet ki a programból !!")
# Küldjünk adatokat az UDP protokollon keresztül
míg True:
send_data = input ("Írjon be néhány szöveget a küldéshez =>");
s.sendto (send_data.kódolni ('utf-8'), (ip, port))
print ("\ n \ n 1. Ügyfél elküldve: ", send_data," \ n \ n ")
adatok, cím = s.visszahívás (4096)
print ("\ n \ n 2. Az ügyfél megkapta: ", adatokat.dekódolás ('utf-8'), "\ n \ n")
# zárja be az aljzatot
s.Bezárás()

UDP csomag küldése / fogadása:

Vegyünk egy példát, amely szerint az UDP csomagokat elküldjük az A rendszerből a B rendszerbe. Tehát a kiszolgáló-kliens koncepcióban a szervert a B rendszer oldalán és az ügyfelet az A rendszer oldalán kell futtatnunk.

Van érvényes IP-címünk is.

A rendszer IP: 192.168.1.6
B rendszer IP: 192.168.1.102

Most, szemben az UDP csomagok küldésével és fogadásával a Linux CLI-n keresztül, futtatni fogjuk szerver.py a Rendszerben, B [192.168.1.102] és akkor futni fogunk ügyfél.py az A rendszerben [192.168.1.6].

A szerver futtatása.py 192-ben.168.1.102?

Itt van a kiszolgáló futtatására szolgáló parancs.py

$ python3 szerver.py 192.168.1.102 4444

Itt van a képernyőkép

Itt két érv szól a python program mellett. 1utca argumentum maga a szerver IP-címe, itt annak 192.168.1.102 és 2nd argumentum az, hogy melyik szerver fogja hallgatni, itt a 4444-et választottuk.

Az ügyfél futtatása.py 192-ben.168.1.6?

Itt van az ügyfél futtatására szolgáló parancs.py

$ python3 kliens.py 192.168.1.102 4444

Itt van a képernyőkép

Itt két érv szól a python program mellett. 1utca argumentum a szerver IP címe, itt annak 192.168.1.102 és 2nd argument az a port, ahol a szerver fut. Példánkra ez 4444.

Küldjön vagy fogadjon szöveget:

Amint láthatja, készen állunk a kommunikációra két rendszer között. De először az ügyféltől kell kiindulnunk. Írjunk be valamit az ügyfélbe, és nézzük meg, hogy eléri-e a szervert vagy sem.

Adatok küldése az ügyféltől: „Kliens vagyok”

Képernyőkép képernyő kliens:

Most ennek az ügyfélüzenetnek meg kell érkeznie a szerverre. Itt van a szerver képernyőképe.

Most láthatjuk a szerver oldalon is, hogy van lehetőségünk valamit elküldeni az ügyfélnek. Próbáljuk meg.

Adatok küldése az ügyféltől: „Szerverről származom”

Szerver képernyőképe:

És itt van a képernyőkép az ügyfél oldalon.

Ez végtelen ideig fog tartani, amíg le nem állítjuk a python programot a Ctrl + c használatával.

Ellenőrizze az UDP csomagot a Wiresharkban:

Most folytattunk némi kommunikációt, de honnan tudhatjuk meg, hogy az UDP-t használták a csomagok küldésére vagy fogadására. Tehát ellenőrizhetjük a rögzítést a Wiresharkban.

Lássuk a csomagot, amikor az ügyfél [192.168.1.6] adatokat küldött [„Kliens vagyok”] a [192.168.1.6].

Kód magyarázata:

Az alapvető python-kód magyarázatát lásd a „Python Socket File Transfer Send” hivatkozási részben.

Csak az Client és a Server python fájl fontos vonalkódjait magyarázzuk el. Hasznos megjegyzések találhatók az ügyfél és a szerver kódjában.

Kliens kód magyarázata:

ha len (sys.argv) == 3:

A fenti sor szükséges annak ellenőrzéséhez, hogy a felhasználó átadta-e a kötelező kötelező argumentumokat. Vagy különben a program kilép. Ugyanaz az ellenőrzés van a szerver programban is.

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

A fenti sor a socket szerver létrehozása UDP-vel [SOCK_DGRAM] jegyzőkönyv. Ugyanaz a kód van a szerveren.py.

míg True:

A program végtelen ciklusban történő futtatása mindaddig, amíg a felhasználó nem teszi meg a Ctrl + c billentyűt. Ugyanaz a kód van a szerveren.py.

s.sendto (send_data.kódolni ('utf-8'), (ip, port))

Adatok küldésére az említetteknél ip és kikötő szám.

adatok, cím = s.visszahívás (4096)

A szerverről érkező adatok fogadásához. Ugyanaz a kód van a szerveren.py.

Szerverkód magyarázata:

s.sendto (send_data.kódolás ('utf-8'), cím)

Adatok küldése az ügyfél címére.

Következtetés:

Küldhetünk vagy fogadhatunk UDP adatokat a python program segítségével. Belsőleg szerver kliens mechanizmust használ.

Referenciák:

A TCP megértése: https: // linuxhint.com / tcp_packet_capture_analysis /
Az UDP megértése: https: // linuxhint.com / udp_wireshark_analysis /
UDP csomagok küldése és fogadása Linux CLI-n keresztül:
https: // linuxhint.com / send_receive_udp_packets_linux_cli /
Python Socket File Transfer Send:
https: // linuxhint.com / python_socket_file_transfer_send /

A Doom telepítése és lejátszása Linuxon
Bevezetés a Doom-ba A Doom sorozat a 90-es években keletkezett az eredeti Doom megjelenése után. Azonnali sláger volt, és ettől kezdve a játéksorozat ...
Vulkan Linux felhasználók számára
A grafikus kártyák minden új generációjával azt látjuk, hogy a játékfejlesztők átlépik a grafikus hűség határait, és egy lépéssel közelebb kerülnek a ...
OpenTTD vs Simutrans
Saját közlekedési szimuláció létrehozása szórakoztató, pihentető és rendkívül csábító lehet. Ezért meg kell győződnie arról, hogy a lehető legtöbb ját...