Elvárások:
Íme néhány kulcsfontosságú pont, amelyeket ebből a cikkből megismerhet
- Néhány szöveg küldése az UDP protokollt használó python program segítségével.
- Szöveg fogadása UDP protokollt használó python program segítségével.
- Ellenőrizze az UDP csomagot a Wiresharkban.
- 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:
- 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.
- 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 aljzatimport 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 aljzatimport 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.6B 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 4444Itt 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 4444Itt 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 /