Očakávania:
Tu je niekoľko kľúčových bodov, z ktorých sa možno dozvedieť z tohto článku
- Posielanie textu pomocou programu python, ktorý používa protokol UDP.
- Príjem textu pomocou programu python, ktorý používa protokol UDP.
- Skontrolujte paket UDP vo Wireshark.
- Dozviete sa viac o kóde python na odosielanie a prijímanie paketov UDP.
Všeobecný diagram nastavenia:
Systémy A a B by mali byť schopné navzájom sa testovať.
Predpoklady alebo obmedzenia:
- Oba systémy by mali mať Linux a Ubuntu. Tento kód môže alebo nemusí fungovať v iných operačných systémoch, ako sú Windows10, MAC atď.
- Oba systémy by mali mať python verzie 3. Tento kód môže, ale nemusí fungovať na pythone 2.Verzia 7.
Poznámka: Môžete skontrolovať referenciu na vyskúšanie Odosielať a prijímať pakety UDP cez rozhranie Linux CLI predtým, ako vykonajú rovnakú úlohu súbory python.
Súbory Pythonu:
Existujú dva súbory pythonu server.py a zákazník.py. súbor servera a súbor klienta by mali byť prítomné v serverovom systéme a klientskom systéme.
Server.py
dovozná zásuvkaimport sys
ak len (sys.argv) == 3:
# Získajte "IP adresu servera" a tiež "číslo portu" z
argument 1 a argument 2
ip = sys.argv [1]
port = int (sys.argv [2])
inak:
print ("Spustiť ako: server python3.py
výstup (1)
# Vytvorte UDP soket
s = zásuvka.zásuvka (zásuvka.AF_INET, socket.SOCK_DGRAM)
# Pripojte zásuvku k portu
server_address = (ip, port)
s.väzba (adresa_serveru)
print ("Ukončite Ctrl + c pre ukončenie programu !!„)
zatiaľ čo je pravda:
print ("####### Server počúva #######")
údaje, adresa = s.recvfrom (4096)
print ("\ n \ n 2. Server dostal: „, údaje.dekódovať ('utf-8'), "\ n \ n")
send_data = input ("Zadajte text na odoslanie =>")
s.sendto (send_data.kódovanie ('utf-8'), adresa)
print ("\ n \ n 1. Server sent: ", send_data," \ n \ n ")
Zákazník.py
dovozná zásuvkaimport sys
ak len (sys.argv) == 3:
# Získajte „IP adresu servera“ a tiež „číslo portu“ z argumentov 1 a 2
ip = sys.argv [1]
port = int (sys.argv [2])
inak:
print ("Spustiť ako: klient python3.py
výstup (1)
# Vytvorte soket pre server
s = zásuvka.zásuvka (zásuvka.AF_INET, socket.SOCK_DGRAM, 0)
print ("Ukončite Ctrl + c pre ukončenie programu !!„)
# Posielame údaje prostredníctvom protokolu UDP
zatiaľ čo je pravda:
send_data = input ("Zadajte text na odoslanie =>");
s.sendto (send_data.encode ('utf-8'), (ip, port))
print ("\ n \ n 1. Klient odoslaný: ", send_data," \ n \ n ")
údaje, adresa = s.recvfrom (4096)
print ("\ n \ n 2. Klient dostal: „, údaje.dekódovať ('utf-8'), "\ n \ n")
# zatvorte zásuvku
s.Zavrieť()
Odoslať / prijať paket UDP:
Zoberme si príklad, ako keby sme poslali UDP paket zo systému A do systému B. V koncepcii server-klient teda musíme spustiť server na strane systému B a klienta na strane systému A.
Máme tiež platné adresy IP.
Systém A IP: 192.168.1.6Systém B IP: 192.168.1.102
Teraz na rozdiel od odosielania a prijímania paketov UDP cez Linux CLI budeme bežať server.py v systéme, B [192.168.1.102] a potom bežíme zákazník.py v systéme A [192.168.1.6].
Ako spustiť server.py v roku 192.168.1.102?
Tu je príkaz na spustenie servera.py
server $ python3.py 192.168.1.102 4444Tu je snímka obrazovky
Tu sú dva argumenty pre program python. 1sv argumentom je IP adresa samotného servera, tu jeho 192.168.1.102 a 2nd argument je port, ktorý bude server počúvať, tu sme vybrali 4444.
Ako spustiť klienta.py v roku 192.168.1.6?
Tu je príkaz na spustenie klienta.py
$ python3 klient.py 192.168.1.102 4444Tu je snímka obrazovky
Tu sú dva argumenty pre program python. 1sv argument je IP adresa servera, tu jeho 192.168.1.102 a 2nd argument je port, na ktorom je spustený server. Pre náš príklad je to 4444.
Odoslať alebo prijať text:
Teraz môžete vidieť, že sme pripravení komunikovať medzi dvoma systémami. Najprv však musíme začať od klienta. Poďme niečo napísať do klienta a uvidíme, či sa to dostane na server alebo nie.
Odoslať údaje od klienta: „Som z klienta“
Klient formulára snímky obrazovky:
Teraz by mala táto správa klienta doraziť na server. Tu je screenshot servera.
Teraz vidíme na strane servera aj to, že máme možnosť niečo klientovi poslať. Skúsme to.
Odoslať údaje od klienta: „I am from Server“
Screenshot servera:
A tu je snímka obrazovky na strane klienta.
Teraz to bude trvať nekonečne dlho, kým program Python nezastavíme pomocou Ctrl + c.
Skontrolujte paket UDP vo Wireshark:
Teraz sme vykonali určitú komunikáciu, ale ako sa dozvieme, že na odosielanie alebo prijímanie týchto paketov bol použitý protokol UDP. Môžeme teda skontrolovať zachytenie vo Wiresharku.
Pozrime sa na paket, keď je klient [192.168.1.6] odoslal údaje [„Som od klienta“] na server [192.168.1.6].
Vysvetlenie kódu:
Základné vysvetlenie kódu pythonu nájdete v príručke „Python Socket File Transfer Send“.
Vysvetlíme iba dôležité kódy riadkov pre súbor python klienta a servera. Vo vnútri kódu klienta a servera sú užitočné poznámky.
Vysvetlenie kódu klienta:
ak len (sys.argv) == 3:Vyššie uvedený riadok sa vyžaduje na kontrolu, či používateľ odovzdal povinné povinné argumenty. Alebo sa program ukončí. Rovnaká kontrola je aj v serverovom programe.
s = zásuvka.zásuvka (zásuvka.AF_INET, socket.SOCK_DGRAM, 0)Vyššie uvedený riadok má vytvoriť soketový server s UDP [SOCK_DGRAM] protokol. Rovnaký kód je aj na serveri.py.
zatiaľ čo je pravda:Spustiť program v nekonečnej slučke, kým užívateľ neurobí Ctrl + c. Rovnaký kód je aj na serveri.py.
s.sendto (send_data.encode ('utf-8'), (ip, port))Ak chcete odoslať údaje pre uvedené ip a prístav číslo.
údaje, adresa = s.recvfrom (4096)Prijímať akékoľvek údaje prichádzajúce zo servera. Rovnaký kód je aj na serveri.py.
Vysvetlenie kódu servera:
s.sendto (send_data.kódovanie ('utf-8'), adresa)Pošlite údaje na adresu klienta.
Záver:
Môžeme odosielať alebo prijímať údaje UDP pomocou programu python. Interne využíva mechanizmus servera a klienta.
Referencie:
Pre pochopenie protokolu TCP: https: // linuxhint.com / tcp_packet_capture_analysis /
Pre pochopenie UDP: https: // linuxhint.com / udp_wireshark_analysis /
Odosielanie a prijímanie paketov UDP cez rozhranie Linux CLI:
https: // linuxhint.com / send_receive_udp_packets_linux_cli /
Python Socket File Transfer Odoslať:
https: // linuxhint.com / python_socket_file_transfer_send /