Očekávání:
Zde je několik klíčových bodů, z nichž se lze dozvědět z tohoto článku
- Odesílání textu pomocí programu python, který používá protokol UDP.
- Příjem textu pomocí programu python, který používá protokol UDP.
- Zkontrolujte paket UDP ve Wiresharku.
- Další informace o kódu pythonu pro odesílání a přijímání paketů UDP.
Obecné schéma nastavení:
Systémy A a B by se měly navzájem pingovat.
Předpoklady nebo omezení:
- Oba systémy by měly mít Linux s Ubuntu. Tento kód může nebo nemusí fungovat na jiném operačním systému, jako je Windows10, MAC atd.
- Oba systémy by měly mít python verze 3. Tento kód může nebo nemusí fungovat na pythonu 2.7 verze.
Poznámka: Můžete zkontrolovat odkaz na vyzkoušení Odesílat a přijímat pakety UDP prostřednictvím rozhraní Linux CLI před přechodem na to, aby soubory python provedly stejnou úlohu.
Soubory Pythonu:
Existují dva soubory pythonu serveru.py a klient.py. soubor serveru a soubor klienta by měl být přítomen v systému serveru, respektive systému klienta.
Server.py
importovat zásuvkuimport sys
if len (sys.argv) == 3:
# Získejte „IP adresu serveru“ a také „číslo portu“ z
argument 1 a argument 2
ip = sys.argv [1]
port = int (sys.argv [2])
jiný:
print ("Spustit jako: server python3.py
výstup (1)
# Vytvořte soket UDP
s = zásuvka.zásuvka (zásuvka.AF_INET, socket.SOCK_DGRAM)
# Připojte zásuvku k portu
server_address = (ip, port)
s.svázat (server_address)
print ("Ukončete Ctrl + c pro ukončení programu !!")
zatímco je pravda:
tisk ("####### Server naslouchá #######")
data, adresa = s.recvfrom (4096)
print ("\ n \ n 2. Server obdržel: „, data.dekódovat ('utf-8'), "\ n \ n")
send_data = input ("Napište nějaký text k odeslání =>")
s.sendto (send_data.kódování ('utf-8'), adresa)
print ("\ n \ n 1. Server sent: ", send_data," \ n \ n ")
Klient.py
importovat zásuvkuimport sys
if len (sys.argv) == 3:
# Získejte „IP adresu serveru“ a také „číslo portu“ z argumentu 1 a argumentu 2
ip = sys.argv [1]
port = int (sys.argv [2])
jiný:
print ("Spustit jako: python3 klient.py
výstup (1)
# Vytvořit soket pro server
s = zásuvka.zásuvka (zásuvka.AF_INET, socket.SOCK_DGRAM, 0)
print ("Ukončete Ctrl + c pro ukončení programu !!")
# Posíláme data prostřednictvím protokolu UDP
zatímco je pravda:
send_data = input ("Napište nějaký text k odeslání =>");
s.sendto (send_data.encode ('utf-8'), (ip, port))
print ("\ n \ n 1. Klient odeslán: ", send_data," \ n \ n ")
data, adresa = s.recvfrom (4096)
print ("\ n \ n 2. Klient obdržel: „, data.dekódovat ('utf-8'), "\ n \ n")
# zavřete zásuvku
s.zavřít()
Odeslat / přijmout paket UDP:
Vezměme si příklad, jako bychom poslali UDP paket ze systému A do systému B. Takže v konceptu server-klient musíme spustit server na straně systému B a klienta na straně systému A.
Také máme platné adresy IP.
Systém A IP: 192.168.1.6Systém B IP: 192.168.1.102
Nyní na rozdíl od odesílání a přijímání paketů UDP prostřednictvím rozhraní Linux CLI spustíme serveru.py v systému, B [192.168.1.102] a pak budeme běžet klient.py v systému A [192.168.1.6].
Jak spustit server.py v 192.168.1.102?
Zde je příkaz ke spuštění serveru.py
$ python3 server.py 192.168.1.102 4444Zde je snímek obrazovky
Zde existují dva argumenty pro program python. 1Svatý argumentem je IP adresa samotného serveru, zde jeho 192.168.1.102 a 2nd argument je port, který bude server poslouchat, zde jsme vybrali 4444.
Jak spustit klienta.py v 192.168.1.6?
Zde je příkaz ke spuštění klienta.py
$ python3 klient.py 192.168.1.102 4444Zde je snímek obrazovky
Zde existují dva argumenty pro program python. 1Svatý argumentem je IP adresa serveru, zde jeho 192.168.1.102 a 2nd argument je port, kde běží server. Pro náš příklad je to 4444.
Odeslat nebo přijmout text:
Nyní můžete vidět, že jsme připraveni komunikovat mezi dvěma systémy. Nejprve však musíme začít od klienta. Pojďme něco napsat do klienta a uvidíme, jestli to dosáhne na server nebo ne.
Odeslat data z klienta: „Jsem od klienta“
Klient formuláře obrazovky:
Nyní by tato klientská zpráva měla přijít na server. Zde je snímek obrazovky serveru.
Nyní vidíme na straně serveru také máme možnost něco poslat klientovi. Zkusme to.
Odeslat data z klienta: „Jsem ze serveru“
Screenshot serveru:
A tady je screenshot na straně klienta.
Nyní to bude trvat nekonečně dlouho, dokud nezastavíme program python pomocí Ctrl + c.
Zkontrolujte paket UDP ve Wiresharku:
Nyní jsme provedli nějakou komunikaci, ale jak zjistíme, že k odesílání nebo přijímání těchto paketů byl použit UDP. Můžeme tedy zkontrolovat zachycení ve Wiresharku.
Podívejme se na paket, když klient [192.168.1.6] odeslal data [„Jsem od klienta“] na server [192.168.1.6].
Vysvětlení kódu:
Základní vysvětlení kódu pythonu naleznete v části „Odeslání přenosu souboru Python Socket“ v referenční části.
Vysvětlíme pouze důležité kódy řádků pro klientský a serverový pythonový soubor. Uvnitř kódu klienta a serveru jsou užitečné komentáře.
Vysvětlení klientského kódu:
if len (sys.argv) == 3:Výše uvedený řádek je vyžadován ke kontrole, zda uživatel předal povinné povinné argumenty. Jinak program skončí. Stejná kontrola je i v programu serveru.
s = zásuvka.zásuvka (zásuvka.AF_INET, socket.SOCK_DGRAM, 0)Výše uvedený řádek je vytvořit server soketu s UDP [SOCK_DGRAM] protokol. Stejný kód je na serveru.py.
zatímco je pravda:Spuštění programu v nekonečné smyčce, dokud uživatel neprovede Ctrl + c. Stejný kód je na serveru.py.
s.sendto (send_data.encode ('utf-8'), (ip, port))Chcete-li odeslat data pro uvedené ip a přístav číslo.
data, adresa = s.recvfrom (4096)Chcete-li přijímat data pocházející ze serveru. Stejný kód je na serveru.py.
Vysvětlení kódu serveru:
s.sendto (send_data.kódování ('utf-8'), adresa)Zašlete data na adresu klienta.
Závěr:
Můžeme odesílat nebo přijímat data UDP pomocí programu python. Interně používá mechanismus klient serveru.
Reference:
Pro pochopení TCP: https: // linuxhint.com / tcp_packet_capture_analysis /
Abychom pochopili UDP: https: // linuxhint.com / udp_wireshark_analysis /
Odesílejte a přijímejte pakety UDP prostřednictvím rozhraní Linux CLI:
https: // linuxhint.com / send_receive_udp_packets_linux_cli /
Python Socket File Transfer Odeslat:
https: // linuxhint.com / python_socket_file_transfer_send /