Programovanie Python Socket - Skôr ako začnem s programovaním Python Socket, dúfam, že v Pythone máte dobré základy. Ak viete aj Djanga, bolo by to ešte ľahšie pochopiteľné. Nie, programovanie soketov nesúvisí s Djangom, ale terminológie v programovaní soketov Python a Django sú takmer rovnaké, hoci ide o dve rôzne kategórie. Čo teda vlastne je programovanie Python Socket? Programovanie Python Socket nie je len v Pythone, ale aj v Java a takmer vo všetkých ostatných programovacích jazykoch. Ale v prípade pythonu je programovanie soketov skutočne zrozumiteľné. Programovanie Python Socket znamená sieťové programovanie. Zahŕňa kódy na strane klienta a na strane servera Python Socket. Táto definícia je však rovnako dobrá ako kniha, v ktorej sa uvádza, že na vývoj softvéru sa používa programovanie C. A nie, nie som za tým. Som tu, aby som sa ubezpečil, že hlbšie pochopíte základy programovania soketov Python, skôr než začnete písať vlastné soketové moduly. Začnime teda sledovať, ako soket funguje na strane klienta alebo na strane servera Python Socket.

Čo je Python Socket Programming?

Ak ste sa naučili programovanie v C, potom by bolo učenie sa programovania soketov v Pythone veľmi ľahké, pretože sú takmer rovnaké. Aby to bolo jednoduchšie, programovanie soketov Python je len kúsok kódov o tom, ako počítače medzi sebou komunikujú. A to nekončí iba sieťou LAN, ale tiež podporuje siete založené na sieťach WAN, MAN a intranet. Dokonca používame zásuvky v našom každodennom živote. Nerozumiem? Dovoľte mi uviesť jednoduchý príklad. Ak sa chcete pripojiť a povedzte Facebook.com, jednoducho napíšte to isté do panela s adresou URL. Toto pripojenie, ktoré ste práve vytvorili, nie je iba vytvorené pomocou vecí DNS. Toto všetko je nakonfigurované prostredníctvom programovania soketov soketu. Zásuvky rozhodujú o spôsobe komunikácie dvoch sietí. Akákoľvek komunikácia prechádzajúca sieťou, môže to byť video, spojenia VOIP alebo iba text; všetko prechádza zásuvkou. Teraz, keď vieme, čo sú zásuvky, môžeme vyvinúť našu vlastnú zásuvku v pythone.

Zdroj obrázka: pixabay.com

Druhy programovania soketov Python

Teraz je tam veľa zásuviek. Ale nebudeme hovoriť o všetkých z nich, pretože tu nemôžem pokryť každého z nich. Môžete buď vytvoriť soket UDP, soket TCP alebo dokonca soket portov a ak budem pokračovať, bude ich oveľa viac. Dnes by som sa však pozrel viac do soketov TCP a UDP, pretože sú to najzákladnejšie a ako začiatočníci môžu byť veľmi dobrí, keď môžu začať s programovaním Python Socket.

  • Programovanie zásuviek UDP

Protokol User Datagram Protocol alebo jeho všeobecne známy ako UDP je alternatívny protokol k TCP, ktorý prenáša pakety z jedného hostiteľa na druhého. Na rozdiel od protokolu TCP (Protocol Control Protocol) je protokol UDP bez pripojenia a nie je orientovaný na tok. To znamená, že server UDP bude zachytávať iba prichádzajúce pakety od všetkých hostiteľov bez toho, aby identifikoval spoľahlivé zdrojové pripojenie. Na to použijeme funkciu socket.socket. Jednoduchý soket UDP sa v Pythone vytvára nasledujúcim spôsobom:

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

Áno. To je všetko a my sme v Pythone vytvorili jednoduchý soket UDP. Python Socket Programovanie alebo dokonca vytvorenie jednoduchého soketu nie je raketová veda. Avšak veľká časť spočíva v kódovaní UDP servera a klienta. Pretože zásuvky UDP nie sú prepojené, komunikácia sa iniciuje pomocou funkcií odosielania a prijímania soketu. Tieto funkcie nevyžadujú, aby boli navzájom prepojené. Môžu skutočne odosielať a prijímať pakety z ľubovoľného náhodného zdroja. Takto sa vytvára server UDP:

import socketport = 2924s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) s.bind ((„“, port)) print „Vyžaduje sa pripojenie k portu na počítači“, port

zatiaľ čo 1:

údaje, adresa = s.recvod (1024)

tlačiť údaje

To sa nemusí zdať veľa, ale takto sa to skutočne vytvára. Dá sa tu použiť akýkoľvek port. Práve som si vybral náhodný server ako 2924. Server UDP potrebuje otvorený port na odosielanie a prijímanie prichádzajúcich spojení. Neexistuje počúvanie portov ani prijímanie spojení alebo požiadaviek. Stáva sa to jednoducho bez akejkoľvek autentifikácie. Skúste spustiť vyššie uvedený server na termináli a zistiť, ako to funguje.

Toto je iba jednoduchý UDP server, ktorý sme vytvorili. Umožňuje, aby bol trochu zaujímavejší a tiež trochu komplikovanejší:

„Jedná sa o jednoduchý soketový server UDP“ “import soketu importu soketu

HOST = “” # Tu si môžete vyskúšať všetky dostupné rozhrania

PORT = 2924 # Akýkoľvek náhodný port, ktorý sa štandardne nepoužíva v operáciách Windows alebo Linux

# Kódovanie zásuvky UDP

skúste:

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

vytlačiť „Socket inicializovaný“ “

okrem socket.error, msg:

print „Vytvorenie zásuvky nebolo úspešné. Vyskytla sa nasledujúca chyba: ”+ str (msg (0)) +„ Správa “+ msg (1)

sys.exit ()

# Teraz musíme prepojiť tento soket s vyššie uvedeným hostiteľom a portom

vyskúšajte nasledujúci postup:

s.bind ((HOST, PORT))

okrem socket.error, msg:

print “Binding Socket failed. Nasledujúca chyba prerušila väzbu: ”+ str (msg (0)) + 'Správa' + msg (1)

sys.exit ()

vytlačiť 'Socket Viazanie dokončené'

# Zachovať vytvorené pripojenie

zatiaľ čo 1:

# zachytiť údaje od klienta pomocou premenných údajov a adresy

d = s.recvfrom (1024)

údaje = d (0)

adresa = d (1)

ak nie údaje:

prestávka

answer = 'OK …' + dáta

s.sendto (odpoveď, adresa)

vytlačiť 'Token message (' + adresa (0) + ':' + str (adresa (1)) + ') -' + data.strip ()

s.close ()

Spustite vyššie uvedený program a na port 2924 spustíte server UDP. Blahoželáme, úspešne ste vytvorili Socket v Pythone. Nezabudnite však na vedomie, že server UDP zvládne množstvo klientov na rozdiel od servera TCP, hlavným dôvodom je, že na serveri UDP nie je pevné pripojenie, napríklad v prípade servera TCP.

Odporúčané kurzy

  • Certifikačný kurz ladenia v Ruby
  • Kurz PHP MySQL
  • Certifikačný kurz programovania VB.NET
  • Kompletné školenie nadácie ITIL
  • Programovanie klientov UDP

Teraz, keď sme úspešne vytvorili server UDP, potrebujeme klienta, aby naň nadviazal správne pripojenie, aby sme vedeli o jeho fungovaní. Umožňuje pracovať na vytvorení správneho UDP klienta v Pythone. Tento klient sa pripojí k nášmu UDP serveru, ktorý sme vytvorili vyššie:

„Vytváranie jednoduchého UDP klienta používa sokety“ “import socketimport sys

# Vytvorenie soketu UDP

vyskúšajte nasledujúci postup:

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

okrem socket.error:

tlač 'Vytvorenie zásuvky nebolo úspešné'

sys.exit ()

host = '127.0.0.1'; # Môžete tiež skúsiť použiť localhost namiesto tejto IP adresy, obidve sú rovnaké.

port = 2924;

zatiaľ čo (1):

msg = raw_input ('Zadajte správu, ktorú chcete odoslať na server:')

skúste:

# Teraz musíme nastaviť reťazce

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

# Teraz potrebujeme získať údaje a adresu od klienta pomocou údajov a adresy

d = s.recvfrom (1024)

odpoveď = d (0)

adresa = d (1)

tlač 'Odpovedať zo servera je:' + odpoveď

okrem socket.error, msg:

print 'Nasledujúca objavená chyba:' + str (msg (0)) + 'Správa' + msg (1)

sys.exit ()

Áno. Vytvorenie klienta UDP v programovaní Python Socket je omnoho jednoduchšie ako vytvorenie servera UDP. Ale takto to ide. Nemyslím si, že by som potreboval vysvetliť čokoľvek z vyššie uvedeného kódu, pretože som už zmienil všetky požadované veci v komentároch # tagov. Len sa uistite, že IP adresa a zadaný port sú správne a že váš firewall neblokuje pripojenie, inak to vždy povedie k zlyhaniu bez ohľadu na to.

  • Programovanie TCP Socket

Teraz, keď sme sa naučili, ako vytvoriť klienta UDP a servera, sa môžeme pozrieť na programovanie soketov TCP. Na vytvorenie soketu TCP tu použijeme rovnakú funkciu socket.socket.

import socket # Import modulu socket z knižníc python # create AF_INET a stream socketss = socket.socket (socket.AF_INET, socket.SOCK_STREAM) print 'Socket Creation Successful'

Tu sa AF_INET používa na pripojenie adresy Ipv4 a tok ponožiek je protokol orientovaný na TCP. Toto je jednoduchý soket TCP, ktorý sme vytvorili. Teraz vytvoríme pokročilou verziu tej istej veci. Budeme hádzať výnimky aj tu, rovnako ako sme to hodili pri vytváraní serverov a klientov UDP, takže v prípade zlyhania pripojenia budeme vedieť, kde leží skutočný program. Socket.error sa použije na spracovanie všetkých týchto chýb podobných chybám programovania UDP.

Takže teraz umožňuje vytvoriť soket s vyššie uvedeným spracovaním chýb a pripojiť sa k hostiteľovi facebook.com. Takto je potrebné to urobiť:

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

okrem socket.error, msg:

print 'Vytvorenie zásuvky nebolo úspešné. Vyskytla sa nasledujúca chyba: '+ str (msg (0)) +', Chybové hlásenie: '+ msg (1)

sys.exit ();

tlač 'Socket Creation success'

host = 'www.facebook.com'

port = 2924

vyskúšajte nasledujúci postup:

remote_ip = socket.gethostname (host)

okrem socket.gaierror:

vytlačiť 'Nesprávny názov hostiteľa. Ukončenie … '

sys.exit ()

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

s.connect ((vzdialený_ip, port))

vytlačte 'Socket Connected to' + host + 'na ip' + remote_ip

Teraz to už stačí, ak potrebujeme iba nadviazať spojenie. To však nie je náš cieľ. Máme v úmysle vytvoriť spojenie, na ktorom by sme mohli posielať a prijímať aj údaje na oboch koncoch. Môžeme odosielať údaje pomocou funkcie sendall. Takto to vyzerá takto:

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

okrem socket.error, msg:

print 'Vytvorenie zásuvky nebolo úspešné. Vyskytla sa nasledujúca chyba: '+ str (msg (0)) +', Chybové hlásenie: '+ msg (1)

sys.exit ();

tlač 'Socket Creation success'

host = 'www.facebook.com'

port = 2924

vyskúšajte nasledujúci postup:

remote_ip = socket.gethostname (host)

okrem socket.gaierror:

vytlačiť 'Nesprávny názov hostiteľa. Ukončenie … '

sys.exit ()

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

s.connect ((vzdialený_ip, port))

vytlačte 'Socket Connected to' + host + 'na ip' + remote_ip

# prenos údajov pomocou funkcie odoslania

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

skúste:

s.sendall (správa)

okrem socket.error:

#Odoslanie zlyhalo

tlač 'Chyba prenosu'

sys.exit ()

tlač 'Stav správy: Odoslané'

Teraz, keď sme vytvorili úspešné pripojenie a môžeme tiež odosielať údaje, sa pozrime, ako by sme mohli údaje získať úplne. Takto to vyzerá:

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

okrem socket.error, msg:

print 'Vytvorenie zásuvky nebolo úspešné. Vyskytla sa nasledujúca chyba: '+ str (msg (0)) +', Chybové hlásenie: '+ msg (1)

sys.exit ();

tlač 'Socket Creation success'

host = 'www.facebook.com'

port = 2924

vyskúšajte nasledujúci postup:

remote_ip = socket.gethostname (host)

okrem socket.gaierror:

vytlačiť 'Nesprávny názov hostiteľa. Ukončenie … '

sys.exit ()

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

s.connect ((vzdialený_ip, port))

vytlačte 'Socket Connected to' + host + 'na ip' + remote_ip

# prenos údajov pomocou funkcie odoslania

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

skúste:

s.sendall (správa)

okrem socket.error:

#Odoslanie zlyhalo

tlač 'Chyba prenosu'

sys.exit ()

tlač 'Stav správy: Odoslané'

# Teraz za účelom získania údajov používame funkciu recv na ich dosiahnutie

answer = s.recv (4096)

tlačová odpoveď

Posledná vec je, že musíme uzavrieť soket, ktorý by sme mohli urobiť pomocou nasledujúceho kódu:

s.close ()

A nakoniec záväzná časť. Pomocou funkcie bind môžeme spojiť zásuvky s IP adresami a portmi.

import socketimport sysHOST = ”#To je to isté ako v protokole UDPPORT = 2924 # pre prístup k údajom.

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

tlač 'Vytvorenie zásuvky bolo úspešné'

vyskúšajte nasledujúci postup:

s.bind ((HOST, PORT))

okrem socket.error, msg:

print 'Viazanie zlyhalo. Nasledujúca chyba sa vyskytla '+ str (msg (0)) +' Správa '+ msg (1)

sys.exit ()

tlač 'Socket Binding úspešne'

Teraz potrebujeme počúvať prichádzajúce prichádzajúce spojenia, ak potrebujeme pripojenie servera. To je možné vykonať pomocou tohto jednoduchého príkazu:

s.listen (10) print 'Listener started'

Nakoniec musíme vytvoriť soket, ktorý akceptuje tieto pripojenia:

import socketimport sysHOST = ”PORT = 2924

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

tlač 'Socket Creation success'

vyskúšajte nasledujúci postup:

s.bind ((HOST, PORT))

okrem socket.error, msg:

print 'Viazanie zlyhalo. Po chybe '+ str (msg (0)) +' message '+ msg (1)

sys.exit ()

vytlačiť 'Zásuvka úspešná'

s.listen (10)

tlač 'Počúvanie začalo'

# Prijímanie spojení

conn, addr = s.accept ()

# Poskytovanie informácií o pripojenom klientovi

print 'Spojenie nadviazané pomocou' + addr (0) + ':' + str (addr (1))

V skutočnosti je toho oveľa viac. Môžeme tiež písať kódy pre manipulátory a ďalšie veci. Ale myslím si, že by to malo byť teraz. Uistite sa, že máte tieto základy správne, po ktorých zostávajúce časti sú iba kúskom tortu, ktorý sa treba naučiť.

Prvý zdroj obrázka: pixabay.com

Súvisiace články: -

Tu je niekoľko článkov, ktoré vám pomôžu získať viac podrobností o programovaní Python Socket, takže stačí prejsť na odkaz.

  1. 25 najúžasnejších otázok a odpovedí na Python
  2. Kariéra v Pythone
  3. Aké sú výhody a obmedzenia používania Pythonu?
  4. Dôležité rozdiely Python verzus Ruby Performance
  5. Úvod do programovania zásuviek v PHP
  6. Programovanie zásuviek v Java Metóda triedy soketu

Kategórie: