Python Socket Programming - Než začnu s Python Socket Programming, doufám, že máte dobré základy v pythonu. Pokud také znáte Djanga, bylo by to ještě snazší pochopit. Ne, programování soketů nesouvisí s Djangem, ale terminologie v programování soketů Python a Django jsou téměř stejné, i když se jedná o dvě různé kategorie. Co tedy vlastně je programování Python Socket? Programování Python Socket není jen v Pythonu, ale také v Javě a téměř ve všech ostatních programovacích jazycích. Ale v případě pythonu je programování soketů ve skutečnosti velmi snadné pochopit. Programování Python Socket znamená síťové programování. Zahrnuje kódy na straně klienta a na straně serveru Python Socket. Tato definice je ale stejně dobrá jako kniha, ve které je uvedeno, že programování C se používá k vývoji softwaru. A ne, nejsem tu. Jsem zde, abych se ujistil, že se lépe seznámíte se základy programování soketů Python, než začnete psát vlastní soketové moduly. Začněme tedy, jak funguje soket na straně klienta nebo na straně serveru Python Socket.

Co je Python Socket Programming?

Pokud jste se naučili programování v jazyce C, pak by učení programu pythonového soketu v Pythonu bylo velmi snadné, protože jsou téměř stejné. Aby to bylo jednodušší, programování soketů pythonů je pouhým kódem toho, jak počítače v síti spolu komunikují. A to nekončí pouze sítí založenou na síti LAN, ale také podporou sítí založených na sítích WAN, MAN a intranet. V našem každodenním životě dokonce používáme zásuvky. Nerozumíte? Dovolte mi uvést jednoduchý příklad. Pokud se chcete připojit, aby bylo možné říci Facebook.com, jednoduše zadejte stejnou věc do adresního řádku. Toto spojení, které jste právě vytvořili, tedy není jen vytvořeno pomocí věcí DNS. To vše je nakonfigurováno prostřednictvím programování soketů python. Zásuvky rozhodují, jak budou dvě sítě komunikovat. Jakákoli komunikace procházející sítí, ať už se jedná o video, připojení VOIP nebo jen text; všechno prochází zásuvkou. Nyní, když víme, jaké jsou zásuvky, můžeme vyvinout vlastní soket v pythonu.

Zdroj obrázku: pixabay.com

Druhy programování soketů Python

Teď je tam spousta zásuvek. Ale nebudeme mluvit o všech z nich, protože nemohu pokrýt každého z nich zde. Můžete buď vytvořit soket UDP, soket TCP nebo dokonce soket portů a pokud budu pokračovat, bude jich mnohem víc. Ale dnes bych se více podíval do soketů TCP a UDP, protože jsou to nejzákladnější a jako začátečník mohou být velmi dobré, když začneme s programováním Python Socket.

  • Programování soketů UDP

Protokol User Datagram Protocol nebo jeho běžně známý jako UDP je alternativní protokol k TCP, který přenáší pakety z jednoho hostitele na druhého. Na rozdíl od protokolu TCP (Protocol Control Protocol) je protokol UDP protokolem bez připojení a není orientován na toky. To znamená, že server UDP zachytí pouze příchozí pakety od všech hostitelů, aniž by identifikoval spolehlivé zdrojové připojení. K tomu použijeme funkci socket.socket. Jednoduchý soket UDP je v Pythonu vytvořen následujícím způsobem:

import socket #importing socket module from python library # Nyní musíme vytvořit AF_INET a sock dgram socketss = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) print „Socket Creation Successful“

Ano. To je vše a my jsme v pythonu vytvořili jednoduchý UDP socket. Python Socket Programování nebo dokonce vytvoření jednoduchého soketu není raketová věda. Ale velký problém spočívá v kódování serveru UDP a klienta. Protože sokety UDP jsou bez připojení, jsou komunikace zahájeny pomocí funkcí odesílání a přijímání soketu. Tyto funkce nevyžadují, aby byly vzájemně propojeny. Ve skutečnosti mohou odesílat a přijímat pakety z libovolného náhodného zdroje. Takto je vytvořen server UDP:

import socketport = 2924s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) s.bind ((“”, port)) print “Vyžádání připojení k portu na počítači”, port

zatímco 1:

data, adresa = s.recvfrom (1024)

tisknout data

To se nemusí zdát moc, ale tak je to skutečně vytvořeno. Zde lze použít libovolný port. Právě jsem si vybral náhodný jako 2924. Server UDP potřebuje port, aby byl otevřen pro odesílání a přijímání příchozích připojení. Neexistuje naslouchání portu ani přijímání spojení nebo požadavek. Stává se to bez jakékoli autentizace. Zkuste spustit výše uvedený server na terminálu a podívejte se, jak to funguje.

Toto je pouze jednoduchý UDP server, který jsme vytvořili. Umožňuje to trochu zajímavější a také trochu komplikovanější:

„Toto je jednoduchý soketový server UDP“ „import socketimport sys

HOST = “” # Zde si můžete vyzkoušet všechna dostupná rozhraní

PORT = 2924 # Jakýkoli náhodný port, který se ve výchozím nastavení nepoužívá na Windows nebo Linux

# Kódování zásuvky UDP

Snaž se :

s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM)

vytisknout „Socket inicializovaný“ '

kromě socket.error, msg:

tisk „Vytvoření zásuvky se nezdařilo. Došlo k následující chybě: ”+ str (msg (0)) + 'Message' + msg (1)

sys.exit ()

# Nyní musíme svázat tento soket s výše uvedeným hostitelem a portem

Snaž se:

s.bind ((HOST, PORT))

kromě socket.error, msg:

tisk „Binding Socket se nezdařil. Následující chyba přerušila vazbu: ”+ str (msg (0)) + 'Message' + msg (1)

sys.exit ()

vytisknout 'Socket vazba dokončena'

# Zachovat navázané připojení

zatímco 1:

# zachycení dat z klienta pomocí proměnných dat a adresy

d = s.recvfrom (1024)

data = d (0)

adresa = d (1)

pokud ne data:

přestávka

answer = 'OK…' + data

s.sendto (odpověď, adresa)

tisk 'Token message (' + adresa (0) + ':' + str (adresa (1)) + ') -' + data.strip ()

s.close ()

Spusťte výše uvedený program a na portu 2924 spustíte server UDP. Gratulujeme, úspěšně jste vytvořili Socket v Pythonu. A nezapomeňte, že server UDP zvládne spoustu klientů na rozdíl od serveru TCP, přičemž hlavním důvodem je, že na serveru UDP neexistuje pevná konektivita, jako je tomu v případě serveru TCP.

Doporučené kurzy

  • Certifikační kurz v ladění Ruby
  • PHP MySQL Course
  • Kurz certifikace programování VB.NET
  • Kompletní školení ITIL Foundation
  • Programování klientů UDP

Nyní, když jsme úspěšně vytvořili server UDP, potřebujeme klienta, aby k němu vytvořil správné připojení, abychom věděli, jak funguje. Umožňuje tedy pracovat na vytvoření správného UDP klienta v Pythonu. Tento klient se připojí k našemu UDP serveru, který jsme vytvořili výše:

„Vytváření jednoduchého klienta UDP s použitím soketů“ “import socketimport sys

# Vytvoření soketu UDP

Snaž se:

s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM)

kromě socket.error:

tisk 'Vytvoření Socket se nezdařilo'

sys.exit ()

host = '127.0.0.1'; # Můžete také zkusit použít localhost místo této IP adresy, oba jsou stejné.

port = 2924;

zatímco (1):

msg = raw_input ('Zadejte zprávu, kterou chcete odeslat na server:')

Snaž se :

# Nyní musíme nastavit řetězce

s.sendto (msg, (host, port))

# Nyní musíme získat data a adresu od klienta pomocí dat a adresy

d = s.recvfrom (1024)

odpověď = d (0)

adresa = d (1)

tisk 'Odpovědět ze serveru je:' + odpověď

kromě socket.error, msg:

tisk 'Zobrazí se následující chyba:' + str (msg (0)) + 'Zpráva' + msg (1)

sys.exit ()

Jo. Vytvoření klienta UDP v programování Python Socket je mnohem snazší než vytvoření serveru UDP. Ale takto to jde. Nemyslím si, že bych z výše uvedeného kusu kódu musel něco vysvětlit, protože jsem již v poznámkách # tagu zmínil všechny potřebné věci. Jen se ujistěte, že IP adresa a zadaný port jsou správné a váš firewall neblokuje připojení, jinak to vždy povede k selhání bez ohledu na to, co.

  • Programování TCP Socket

Nyní, když jsme se naučili, jak vytvořit klienta UDP a server, se podívejme na programování soketů TCP. K vytvoření soketu TCP použijeme stejnou funkci socket.socket.

import soketu # Import soketu modulu z pythonových knihoven # vytvoří AF_INET a stream socketss = socket.socket (socket.AF_INET, socket.SOCK_STREAM) print 'Socket Creation Successful'

Zde se AF_INET používá pro připojení adresy Ipv4 a tok ponožky je protokol orientovaný na TCP. Toto je jednoduchý soket TCP, který jsme vytvořili. Nyní vytvoříme pokročilou verzi stejné věci. Budeme házet výjimky také zde, stejným způsobem, jak jsme to hodili při vytváření serverů a klientů UDP, takže v případě selhání konektivity budeme vědět, kde skutečný program leží. Socket.error bude použit ke zpracování všech těchto chyb podobných chybám programování UDP.

Takže nyní umožňuje vytvořit soket s výše uvedeným zpracováním chyb a připojit se k hostiteli facebook.com. Takto je třeba to udělat:

import socket #importing soketu moduleimport system: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

kromě socket.error, msg:

tisk 'Vytvoření Socket se nezdařilo. Došlo k následující chybě: '+ str (msg (0)) +', chybová zpráva: '+ msg (1)

sys.exit ();

tisk 'Socket Creation úspěšný'

host = 'www.facebook.com'

port = 2924

Snaž se:

remote_ip = socket.gethostbyname (host)

kromě socket.gaierror:

tisk 'Nesprávný název hostitele. Končí… “

sys.exit ()

print ”+ host + IP adresa 'is' + remote_ip

s.connect ((vzdálený_ip, port))

vytiskněte 'Socket Connected to' + host + 'na ip' + remote_ip

Teď to stačí, pokud potřebujeme pouze navázat spojení. Ale to není náš cíl. Máme v úmyslu vytvořit spojení, kde bychom mohli posílat a přijímat data také na obou koncích. Data můžeme posílat pomocí funkce sendall. Takto to vypadá:

import socket #importing soketu moduleimport system: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

kromě socket.error, msg:

tisk 'Vytvoření Socket se nezdařilo. Došlo k následující chybě: '+ str (msg (0)) +', chybová zpráva: '+ msg (1)

sys.exit ();

tisk 'Socket Creation úspěšný'

host = 'www.facebook.com'

port = 2924

Snaž se:

remote_ip = socket.gethostbyname (host)

kromě socket.gaierror:

tisk 'Nesprávný název hostitele. Končí… “

sys.exit ()

print ”+ host + IP adresa 'is' + remote_ip

s.connect ((vzdálený_ip, port))

vytiskněte 'Socket Connected to' + host + 'na ip' + remote_ip

# Přenos dat pomocí funkce sendall

message = “GET / HTTP / 1.1 \ r \ n \ r \ n”

Snaž se :

s.sendall (zpráva)

kromě socket.error:

# Odeslání selhalo

tisk 'Selhání přenosu'

sys.exit ()

tisk 'Zpráva: Odesláno'

Nyní, když jsme vytvořili úspěšné připojení a můžeme také posílat data, se podívejme, jak bychom mohli data získat úplně. Takto to vypadá:

import socket #importing soketu moduleimport system: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

kromě socket.error, msg:

tisk 'Vytvoření Socket se nezdařilo. Došlo k následující chybě: '+ str (msg (0)) +', chybová zpráva: '+ msg (1)

sys.exit ();

tisk 'Socket Creation úspěšný'

host = 'www.facebook.com'

port = 2924

Snaž se:

remote_ip = socket.gethostbyname (host)

kromě socket.gaierror:

tisk 'Nesprávný název hostitele. Končí… “

sys.exit ()

print ”+ host + IP adresa 'is' + remote_ip

s.connect ((vzdálený_ip, port))

vytiskněte 'Socket Connected to' + host + 'na ip' + remote_ip

# Přenos dat pomocí funkce sendall

message = “GET / HTTP / 1.1 \ r \ n \ r \ n”

Snaž se :

s.sendall (zpráva)

kromě socket.error:

# Odeslání selhalo

tisk 'Selhání přenosu'

sys.exit ()

tisk 'Zpráva: Odesláno'

# Nyní, abychom obdrželi data, k jejich dosažení používáme funkci recv

answer = s.recv (4096)

tisková odpověď

Poslední věc je, že musíme uzavřít patici, kterou bychom mohli udělat pomocí následujícího kódu:

s.close ()

A konečně závazná část. Funkci bind můžeme použít k svázání soketů s IP adresami a porty.

import socketimport sysHOST = ”#To je stejný přístup jako v UDP protokoluPORT = 2924 # port pro přístup k datům.

s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

tisk 'Vytvoření zásuvky bylo úspěšné'

Snaž se:

s.bind ((HOST, PORT))

kromě socket.error, msg:

tisk 'Vazba selhala. Následující chyba nastala '+ str (msg (0)) +' Message '+ msg (1)

sys.exit ()

tisk 'Socket Binding success'

Nyní potřebujeme naslouchat příchozímu připojení, pokud potřebujeme připojení serveru. To lze provést pomocí následujícího jednoduchého příkazu:

s.listen (10) tisk 'Listener spuštěn'

A konečně musíme vytvořit soket, který bude akceptovat tato připojení:

import socketimport sysHOST = ”PORT = 2924

s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

tisk 'Socket Creation úspěšný'

Snaž se:

s.bind ((HOST, PORT))

kromě socket.error, msg:

tisk 'Vazba selhala. Následující chyba '+ str (msg (0)) +' Message '+ msg (1)

sys.exit ()

tisk 'Socket Sitting success'

s.listen (10)

tisk 'Listener spuštěn'

# Přijímání připojení

conn, addr = s.accept ()

# Poskytování informací o připojeném klientovi

tisk 'Spojení navázáno pomocí' + addr (0) + ':' + str (addr (1))

Ve skutečnosti je toho mnohem víc. Můžeme také psát kódy pro obsluhu a další věci. Ale myslím, že to bude prozatím. Ujistěte se, že máte tyto základy správné, po kterých jsou zbývající části pouhým kouskem dortu.

První zdroj obrázku: pixabay.com

Související články: -

Zde je několik článků, které vám pomohou získat více podrobností o programování soketů Python, takže prostudujte odkaz.

  1. 25 nejúžasnějších dotazů a odpovědí na Python
  2. Kariéra v Pythonu
  3. Jaké jsou výhody a omezení používání Pythonu?
  4. Důležitý rozdíl Python vs Ruby Performance
  5. Úvod do programování Socket v PHP
  6. Programování soketů v Javě | Metoda třídy Socket

Kategorie: