GNU/Linux >> Znalost Linux >  >> Linux

Jak na to:Programování soketů v Pythonu

Úvod

Síťové a komunikační programování jsou zvláště výkonná použití jakéhokoli programovacího jazyka. V dnešní době je mnohem běžnější, že se počítače vzájemně propojují (nebo s celou sítí, jako je internet), než aby počítač jednal sám, a vědět, jak přesně tato komunikace probíhá, je důležitou dovedností každého programátor. Pokud jste náhodou milovník Pythonu, možná víte, že Python má několik kompletních knihoven navržených tak, aby zjednodušily síťové programování.
.

Předpoklady

  • Jakákoli verze Pythonu (viz náš průvodce instalací Pythonu 2.7 v Centos)
  • Základní porozumění Pythonu

Zásuvky

Jednou z nejzákladnějších – a nejužitečnějších – importních knihoven je socket knihovna. Umožňuje programátorovi definovat, vytvářet, používat a ničit síťová připojení známá jako sokety .

Co tedy přesně je zásuvka? Z hlediska sítě je soket koncovým bodem připojení, definovaným IP adresou a číslem portu. Připojení používá dvojici soketů:zdroj a cíl.

Programy běžně používají zásuvky, aby umožnily komunikaci dvou počítačů. Sokety lze také použít k předávání dat mezi různými aplikacemi nebo dokonce různými částmi stejného programu. Můžeme předvést, jak soket funguje buď se dvěma aplikacemi, nebo se dvěma samostatnými částmi běžící aplikace:serverovou částí, která naslouchá připojení, a klientskou částí, která se pokouší připojit k serveru. Když váš počítač požaduje například webovou stránku, otevře soket, obvykle jej naváže na port 80 (pro HTTP) a připojí se k webovému serveru pomocí stejného portu a identifikátoru soketu. Veškerá související komunikace prochází tímto koncovým bodem. Když komunikace skončí, klient uzavře soket a spojení, ke kterému je vázán.

Knihovna socketů v Pythonu je dobře vyvinutá a snadno použitelná. Chcete-li použít knihovnu, vložte import socket na začátku vašeho programu. Tento příkaz poskytuje vašemu programu přístup ke všem funkcím knihovny soketů, jako je socket() (vytvořit nový objekt soketu), socketpair() (vytvořte pár nových objektů soketu) a gethostbyname() (mapujte název hostitele na jeho IP adresu), abychom jmenovali alespoň některé.
.

Experimentování s knihovnou Socket

Abychom mohli experimentovat se sokety na našem místním počítači, napíšeme skript Python, abychom vytvořili serverovou aplikaci, která vytvoří otevřený soket. Potom tento kód spustíme a v jiném okně terminálu telnet na náš místní počítač (na localhost) pomocí portu, který jsme otevřeli ve skriptu serveru.

Začněme skriptem, který budeme nazývat server.py . Tento program otevře soket, sváže jej s portem a protokolem a poté bude naslouchat připojení.

import socket # (1)  
host = '' # (2)  
port = 1234 # (3)  

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # (4)  
s.bind((host, port)) # (5)  

print 'Socket created' # (6)  
s.listen(10) # (7)  
print 'Socket listening' # (8)  

conn, addr = s.accept() # (9)  

print 'Connected with ' + addr[0] + ':' + str(addr[1]) # (10)  

Uložte tento soubor jako server.py . V okně terminálu (nebo na příkazovém řádku, pokud používáte Windows) přejděte do umístění souboru a spusťte jej.

python server.py

Nechte jej spuštěný a otevřete druhé okno terminálu. V tomto okně spusťte telnet připojení k localhost na portu 1234.

telnet localhost 1234

Jakmile se připojí, měli byste vidět, že původní okno terminálu vytiskne 'Connected with 127.0.0.1:60426' nebo něco podobného, ​​zatímco okno vašeho klienta krátce zobrazí 'Connected to localhost', než se připojení ukončí.
.

Co dělá kód zásuvky

tak co se tu děje? Podívejme se na každý řádek:

Řádek (1) importuje socket knihovnu a zpřístupňuje ji k použití. Řádky (2) a (3) nastavují proměnné pro host a port , resp. Prázdné host proměnná (to je mimochodem prázdný řetězec ohraničený jednoduchými uvozovkami, NE dvojitými uvozovkami) znamená, že serverová aplikace bude naslouchat na všech dostupných rozhraních, včetně localhost, což je ten, který použijeme k připojení.

Řádek (4) vytváří samotný soket pomocí dvou parametrů. První parametr, AF_INET , znamená, že používáme adresy IPv4 (na rozdíl od adres IPv6). Druhý parametr, SOCK_STREAM , znamená, že tento soket bude používat pakety TCP (provoz UDP používá typ SOCK_DGRAM a funguje trochu jinak – ale to je nad rámec tohoto článku). Řádek (5) spojuje zásuvku, kterou jsme vytvořili, s (host, port) n-tice.

Řádek (7) říká programu, aby naslouchal připojení k soketu, který jsme svázali v řádku (5). 10 Parametr označuje, že server přijme až 10 připojení, než odmítne klienta.

Řádek (9) přiřadí proměnné k připojení, jakmile server přijme připojení. Řádek (10) vytiskne IP adresu a číslo portu klienta, který navázal spojení se serverem.
.

Ponechání zásuvky otevřené

Když jsme testovali tento kód, viděli jsme, že server okamžitě ukončil připojení, což není nijak zvlášť užitečné. Abychom mohli vidět data přenášená tam a zpět přes připojení, přidáme čtyři řádky kódu do našeho server.py program.

data = conn.recv(1024) # 11  
conn.sendall(data) # 12  
conn.close() # 13  
s.close() # 14  

Znovu, pokud tento kód spustíte v okně terminálu a poté se připojíte (z jiného terminálu) k telnet localhost 1234 , připojíte se k localhost, ale tentokrát připojení zůstane otevřené. Zadejte slovo do okna telnetu a stiskněte Return; slovo se ozve zpět na stejnou obrazovku a pak se spojení uzavře.

V řádku (11) jsou data proměnná ukládá data přijatá přes připojení.

Linka (12) posílá tato data zpět přes připojení zpět klientovi – jinými slovy, opakuje je.

A konečně, řádky (13) a (14) procvičují trochu úklidu uzavřením spojení a zničením soketu – nikdy to není špatný nápad, zvláště když kódujete aplikaci založenou na soketu, která bude uvolněna do volné přírody.
.

Závěr

Tento skript je velmi základním příkladem toho, jak vytvořit síťové připojení pomocí socket Pythonu modulu, komunikujte přes připojení a poté jej znovu zavřete. Zatímco plně vyvinutá aplikace bude mnohem komplikovanější, základní komunikační struktura – a teorie za ní – zůstávají stejné.

Doufáme, že se vám tento tutoriál líbil a naučili jste se dost, abyste mohli začít pracovat se sockety v Pythonu. Nezapomeňte se znovu podívat na další výukové programy a na naše spolehlivá řešení hostování VPS.
.
.


Linux
  1. Jak nainstalovat Python na Linux

  2. Jak nainstalovat NumPy

  3. Jak upgradovat Python na 3.9

  1. Jak nainstalovat Python 3 na Ubuntu 18.04 nebo 20.04

  2. Jak nainstalovat Python 3 na Windows 10

  3. Jak komentovat v Pythonu

  1. Jak nainstalovat Python 3.7 na Ubuntu 18.04

  2. Jak nainstalovat Python 3.8 na Ubuntu 18.04

  3. Jak nainstalovat Python 3.9 na Ubuntu 20.04