Kaj je programiranje vtičnic v Pythonu in kako ga obvladati?



Naučite se, kaj je programiranje vtičnic v Pythonu, skupaj s komunikacijo odjemalec-strežnik, skupaj s prenosom objektov python s kislinami in vtičnicami.

Internet je nedvomno postal „duša obstoja“ in za njegovo dejavnost so značilne „povezave“ ali „omrežja“. Ta omrežja so omogočena z uporabo enega najpomembnejših temeljev sistema Vtičnice. Ta članek zajema vsa področja, ki se ukvarjajo s programiranjem vtičnic v Pythonu. Vtičnice vam pri tem pomagajo pri vzpostavljanju povezav nedvomno olajša.

Oglejmo si na hitro vse teme, zajete v tem članku:





Zakaj uporabljati vtičnice?
Kaj so vtičnice v Pythonu?
Kako doseči programiranje vtičnic v Pythonu
Kaj je strežnik?
Kaj je stranka?
Echo Client-Server
Več komunikacij
Prenos objektov Python



Zakaj uporabljati vtičnice?

Vtičnice so hrbtenica mreženja. Omogočajo prenos informacij med dvema različnima programoma ali napravama. Na primer, ko odprete brskalnik, vi kot odjemalec vzpostavite povezavo s strežnikom za prenos informacij.

Preden se poglobimo v to komunikacijo, najprej ugotovimo, kaj točno so te vtičnice.

Kaj so vtičnice?

Na splošno so vtičnice notranje končne točke, zgrajene za pošiljanje in sprejemanje podatkov. Eno omrežje bo imelo dve vtičnici, po eno za vsako komunikacijsko napravo ali program. Te vtičnice so kombinacija naslova IP in vrat. Ena naprava ima lahko „n“ število vtičnic glede na uporabljeno številko vrat. Za različne vrste protokolov so na voljo različna vrata. Za več informacij o nekaterih pogostih številkah vrat in povezanih protokolih si oglejte naslednjo sliko:




skupna vrata-SocketProgramminginPython-Edureka

Zdaj, ko vam je jasen koncept vtičnic, si oglejmo modul Socket v Pythonu:

Kako doseči programiranje vtičnic v Pythonu:

Če želite doseči programiranje vtičnic v Pythonu, morate uvoziti datoteko vtičnica modul oz . Ta modul je sestavljen iz vgrajenih metod, ki so potrebne za ustvarjanje vtičnic in jim pomagajo pri medsebojnem povezovanju.

Nekatere pomembne metode so naslednje:

MetodeOpis

socket.socket ()

uporablja se za ustvarjanje vtičnic (zahteva se tako na strežniku kot na koncih odjemalca za ustvarjanje vtičnic)

socket.accept ()

java system.exit (0)
uporablja za sprejemanje povezave. Vrne par vrednosti (conn, naslov), kjer je conn nov objekt vtičnice za pošiljanje ali prejemanje podatkov in naslov je naslov vtičnice, ki je na drugem koncu povezave

socket.bind ()

se uporablja za vezavo na naslov, ki je določen kot parameter

socket.close ()

uporablja se za označitev vtičnice kot zaprte

socket.connect ()

uporablja se za povezavo z oddaljenim naslovom, določenim kot parameter

socket.listen ()

omogoča strežniku, da sprejme povezave

Zdaj, ko ste razumeli pomen modula vtičnice, pojdimo naprej, da vidimo, kako lahko služi za ustvarjanje strežnikov in odjemalcev za programiranje vtičnic v .

Kaj je strežnik?

Strežnik je program, računalnik ali naprava, ki je namenjena upravljanju omrežnih virov. Strežniki so lahko v isti napravi ali računalniku ali lokalno povezani z drugimi napravami in računalniki ali celo oddaljeni. Obstajajo različne vrste strežnikov, kot so strežniki baz podatkov, omrežni strežniki, tiskalniški strežniki itd.

Strežniki običajno uporabljajo metode, kot so socket.socket (), socket.bind (), socket.listen () itd., Da vzpostavijo povezavo in se vežejo na odjemalce. Zdaj napišimo program za ustvarjanje strežnika. Upoštevajte naslednji primer:

PRIMER:

import socket s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) s.bind ((socket.gethostname (), 1234)) # številka porta je lahko med 0-65535 (običajno določimo ne privilegirana vrata, ki so > 1023) s.listen (5) while True: clt, adr = s.accept () print (f'Connection to {adr} vzpostavljen ') #f string je dobesedni niz s predpono f, ki # vsebuje python izraze v oklepajih clt .send (bytes ('Programiranje vtičnice v Pythonu', 'utf-8')) # za pošiljanje informacij na clientocket

Kot lahko vidite, je prva potreba po izdelavi vtičnice uvoz modula vtičnice. Po tem se metoda socket.socket () uporablja za ustvarjanje vtičnice na strani strežnika.

OPOMBA:

AF_INET se nanaša na naslov iz interneta in zahteva par (gostitelj, vrata), kjer je gostitelj lahko URL določenega spletnega mesta ali njegov naslov, številka vrat pa je celo število. SOCK_STREAM se uporablja za ustvarjanje protokolov TCP.

Metoda bind () sprejme dva parametra kot sklop (gostitelj, vrata). Vendar je bolje uporabiti 4-mestne številke vrat, saj so spodnje običajno zasedene. Način Listen () omogoča strežniku, da sprejme povezave. Tu je 5 vrsta za več povezav, ki se prikažejo hkrati. Najmanjša vrednost, ki jo lahko tukaj določite, je 0 (če navedete manjšo vrednost, se spremeni v 0). Če noben parameter ni določen, je potreben privzeto ustrezen.

kako zapreti program

The omogoča sprejemanje povezav za vedno. 'Clt' in 'adr' sta odjemalčev objekt in naslov. Izpis za tiskanje samo natisne naslov in številko vrat odjemalske vtičnice. Nazadnje, clt.send se uporablja za pošiljanje podatkov v bajtih.

Zdaj, ko je naš strežnik že pripravljen, pojdimo naprej proti stranki.

Kaj je stranka?

Naročnik je računalnik ali programska oprema, ki od strežnika prejema informacije ali storitve. V modulu odjemalec-strežnik stranke zahtevajo storitve iz strežnikov. Najboljši primer je spletni brskalnik, kot je Google Chrome, Firefox itd. Ti spletni brskalniki zahtevajo spletne strežnike za zahtevane spletne strani in storitve po navodilih uporabnika. Drugi primeri vključujejo spletne igre, spletne klepete itd.

Zdaj pa si oglejmo, kako kodirati program na strani odjemalca :

PRIMER:

uvoz vtičnice s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) s.connect ((socket.gethostname (), 2346)) msg ​​= s.recv (1024) print (msg.decode ('utf-8') )

Prvi korak je uvoz modula vtičnice in nato ustvarjanje vtičnice, tako kot pri ustvarjanju strežnika. Nato za vzpostavitev povezave med odjemalskim strežnikom uporabite metodo connect () z določitvijo (gostitelj, vrata).


OPOMBA: gethostname se uporablja, kadar sta odjemalec in strežnik v istem računalniku. (LAN - localip / WAN - publicip)

Tu želi odjemalec prejeti nekaj informacij s strežnika, zato morate uporabiti metodo recv () in informacije se shranijo v drugo spremenljivko msg. Ne pozabite, da bodo posredovane informacije v bajtih in da bo odjemalec v zgornjem programu z enim prenosom prejel do 1024 bajtov (velikost medpomnilnika). Lahko ga določite za poljuben znesek, odvisno od količine prenesenih informacij.

Na koncu je treba sporočilo, ki se prenaša, dekodirati in natisniti.

Zdaj, ko se zavedate, kako ustvariti programe odjemalca in strežnika, pojdimo naprej, da vidimo, kako jih je treba izvesti.

Echo Client-Server:

Če želite zagnati te programe, odprite ukazni poziv, pojdite v mapo, v kateri ste ustvarili odjemalski in strežniški program, in nato vnesite:

py server.py (tukaj je server.py ime datoteke strežnika, uporabite lahko tudi py -3.7 server.py)

Ko je to storjeno, se strežnik začne izvajati. Če želite zagnati odjemalca, odprite drugo okno cmd in vnesite:

py client.py (tukaj je client.py ime datoteke odjemalca)

IZHOD (SERVER):

(NAROČNIK)

Poskusimo z istim programom tako, da zmanjšamo velikost vmesnega pomnilnika na 7 in poglejmo, kakšne rezultate dobimo:

IZHOD:

pretvori objekt v matriko php

Kot lahko vidite, se povezava prekine po prenosu 7 bajtov. Toda to je težava, ker niste prejeli popolnih informacij in je povezava prekinjena. Nadaljujmo z reševanjem tega vprašanja.

Več komunikacij:

Če želite, da se povezava nadaljuje, dokler odjemalec ne prejme popolnih informacij, lahko uporabite zanko while:

PRIMER:

uvoz vtičnice s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) s.connect ((socket.gethostname (), 2346)), medtem ko je True: msg = s.recv (7) print (msg.decode ('utf- 8 '))

Ko to storite, bo celotno sporočilo prejeto v 7 bajtih na prenos.

A tokrat, kot vidite, povezava ne preneha in nikoli ne veste, kdaj se bo to zgodilo. In k temu dodamo še to, če dejansko ne veste, kako veliko je sporočilo ali informacija, ki jo bo odjemalec prejel od strežnika. V takih primerih lahko na strani odjemalca dejansko uporabite naslednji bit kode:

PRIMER:

complete_info = '' while True: msg = s.recv (7) if len (msg)<=0: break complete_info += msg.decode('utf-8') print(complete_info) 

Na strani strežnika uporabite metodo close (), kot sledi:

clt.close ()

Rezultat tega bo, kot je prikazano na spodnji sliki:

IZHOD:



Zgoraj omenjeni blok kode preverja velikost informacij in jih natisne v medpomnilnik po dva bajta hkrati ter zapre povezavo po zaključku.

Prenos objektov Python:

Do tu imate šele smisel za prenos nizov. Toda, Programiranje vtičnic v Python omogoča tudi prenos objektov Python. Ti predmeti so lahko karkoli, kot so nabori, nabori, slovarji itd. Da bi to dosegli, boste morali uvoziti modul kisline v Python.

Python pickle modul:

Python pickle modul se pojavi, ko dejansko serializirate ali odstranite serializacijo predmetov v pythonu. Oglejmo si majhen primer,

PRIMER:

uvozi kramp mylist = [1,2, 'abc'] mymsg = pickle.dumps (mylist) print (mymsg)

IZHOD: b’x80x03] qx00 (Kx01Kx02Xx03x00x00x00abcqx01e. '

Kot lahko vidite, je v zgornjem programu 'mylist' serializiran s pomočjo funkcije dumps () modula kumarice. Upoštevajte tudi, da se izhod začne z 'b', kar pomeni, da se pretvori v bajte. Pri programiranju vtičnic lahko uporabite ta modul za prenos predmeti python med odjemalci in strežniki.

Kako uporabiti modul pickle za prenos python objektnih struktur?

Ko uporabljate kisle kumarice skupaj z vtičnicami, lahko po omrežju prenesete karkoli. Zapišimo nasprotne strani na strani strežnika in odjemalca za prenos seznama s strežnika na odjemalca:

Na strani strežnika:

import socket import pickle a = 10 s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) s.bind ((socket.gethostname (), 2133)) #binding tuple s.listen (5) while True: clt, adr = s.accept () print (f'Povezava z {adr} je vzpostavljena ') m = {1:' Stranka ', 2:' Strežnik '} mymsg = pickle.dumps (m) # sporočilo, ki ga želimo natisniti pozneje mymsg = {len (mymsg): {a}} 'utf-8') + mymsg clt.send (mymsg)

Tu je m slovar, ki je v bistvu a ki ga je treba s strežnika poslati odjemalcu. To naredimo tako, da najprej serializiramo objekt z uporabo odlagališč () in ga nato pretvorimo v bajte.
Zdaj zapišimo strankino stran:

Na strani stranke:

import socket import pickle a = 10 s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) s.connect ((socket.gethostname (), 2133)), medtem ko je True: complete_info = b '' rec_msg = True while True: mymsg = s.recv (10) if rec_msg: print (f'The length of message = {mymsg [: a]} ') x = int (mymsg [: a]) rec_msg = False complete_info + = mymsg if len (complete_info) -a == x: print ('Prejeta popolna informacija') print (complete_info [a:]) m = pickle.loads (complete_info [a:]) print (m) rec_msg = True complete_info = b '' print (complete_info )

Prva zanka while nam bo pomagala slediti celotnemu sporočilu (complete_info) in sporočilu, ki je bilo sprejeto (rec_msg) z vmesnim pomnilnikom. sporočilo z nastavitvijo rec_
Potem, ko je sporočilo sprejeto, vse, kar počnem, je tiskanje vsakega njegovega kosa, ki ga prejmem v medpomnilnik velikosti 10. Ta velikost je lahko poljubna, odvisno od vaše osebne izbire.

Nato, če je prejeto sporočilo enako celotnemu sporočilu, sporočilo samo natisnem kot prejeto popolno informacijo, po kateri sem sporočilo z uporabo obremenitev () deserializiral.

Rezultat za zgornji program je naslednji:

To nas pripelje do konca tega članka o Programiranju vtičnic v Pythonu. Upam, da ste vse koncepte jasno razumeli.

Poskrbite, da boste čim več vadili in si povrnili izkušnje.

Imate vprašanje za nas? Prosimo, omenite ga v oddelku za komentarje tega bloga 'Programiranje vtičnic v Pythonu', mi se vam bomo javili v najkrajšem možnem času.

Če želite pridobiti poglobljeno znanje o Pythonu skupaj z različnimi aplikacijami, se lahko prijavite v živo s 24-urno podporo in življenjskim dostopom.