Programiranje Python Socket - Preden začnem s programiranjem Python Socket, upam, da imate dobre osnove v pythonu. Če poznate tudi Django, bi bilo to še lažje razumeti. Ne, programiranje vtičnic ni povezano z Django, vendar sta terminologiji v programiranju vtičnic Python in Django skoraj enaki, čeprav gre za dve različni kategoriji. Za začetek, kaj natančno je programiranje Python Socket? Programiranje Python Socket ni samo v pythonu, ampak tudi v Javi in ​​skoraj v vseh drugih programskih jezikih. Toda v primeru pythona je programiranje vtičnic pravzaprav zelo enostavno razumeti. Programiranje Python Socket pomeni omrežno programiranje. Vključuje kode stranke in strani Python Socket, povezane s strežnikom. Toda ta definicija je prav tako dobra, kot se za razvoj programske opreme uporablja knjiga, ki navaja programiranje C. In ne, nisem tukaj zaradi tega. Tu sem, da se prepričam, ali boste globlje razumeli osnove programiranja vtičnic Python, preden začnete pisati svoje module vtičnic. Zato začnimo in si oglejmo, kako socket deluje na strani odjemalca ali na strani strežnika Python Socket.

Kaj je programiranje Python Socket?

Če ste se naučili programiranja C, bi bilo učenje programiranja vtičnic python v Pythonu zelo enostavno, saj so skoraj enaki. Da bi bilo bolj preprosto, je programiranje vtičnic python le del kode, kako računalniki v omrežju komunicirajo med seboj. In to se ne konča samo z omrežjem, ki temelji na LAN-u, podpira tudi omrežja WAN, MAN in intranet. Vtičnice celo uporabljamo v vsakdanjem življenju. Ne razumem? Naj navedem preprost primer. Ko se želite povezati s spletnim mestom Facebook.com, preprosto vtipkajte isto stvar v URL vrstico. Torej, ta povezava, ki ste jo pravkar ustvarili, ni samo ustvarjena s podatki DNS. Vse to je nastavljeno s programiranjem vtičnic python. Vtičnice odločajo, kako komunicirata dve mreži. Vsaka komunikacija, ki poteka po omrežju, naj bo to video, VOIP povezave ali samo besedilo; vse gre skozi vtičnico. Zdaj, ko vemo, kaj so vtičnice, naj razvijemo svojo vtičnico v pythonu.

Vir slik: pixabay.com

Vrste programiranja vtičnic Python

Zdaj je veliko vtičnic. Ampak ne bomo govorili o vseh njih, saj tukaj ne morem pokriti vsakega izmed njih. Lahko ustvarite UDP vtičnico, TCP vtičnico ali celo vtičnico vrat in obstaja še veliko več, če nadaljujem. Ampak danes bi se bolj posvetil TCP in UDP vtičnicam, saj so to najbolj osnove in so lahko izredno dober kot začetnik za začetek s programiranjem Python Socket.

  • Programiranje vtičnic UDP

Uporabniški protokol Datagram ali njegov splošno znan kot UDP je nadomestni protokol do TCP, ki prenaša pakete z enega gostitelja na drugega. Toda za razliko od TCP (protokol za nadzor prenosa), je UDP protokol brez povezave in je usmerjen na tok. To pomeni, da bo strežnik UDP zajemal samo dohodne pakete z vsega gostitelja, ne da bi ugotovil zanesljivo povezavo vira. Za to bomo uporabili funkcijo socket.socket. Preprosta vtičnica UDP se ustvari na Python na naslednji način:

uvoz socket #importing socket module iz knjižnice python # Zdaj moramo ustvariti AF_INET in nock dgram socketss = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) natisniti "Socket Creation uspješno"

Da. To je to in tukaj smo ustvarili preprosto UDP vtičnico v pythonu. Programiranje Python Socket ali celo ustvarjanje preproste vtičnice ni raketna znanost. Toda velika težava je kodiranje strežnika UDP in odjemalca. Ker so vtičnice UDP brez povezave, se sprožijo funkcije za pošiljanje in sprejemanje vtičnic. Te funkcije ne zahtevajo, da se med seboj povežejo. Paketi lahko dejansko pošiljajo in prejemajo iz katerega koli naključnega vira. Takole je ustvarjen strežnik UDP:

import socketport = 2924s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) s.bind (("", port)) natisni "Zahtevaj povezljivost s pristaniščem na stroju", vrata

medtem ko 1:

podatki, naslov = s.recvfrom (1024)

natisniti podatke

To se morda ne zdi veliko, ampak tako je dejansko ustvarjeno. Tukaj lahko uporabite katero koli pristanišče. Pravkar sem izbral naključnega 2924. Strežnik UDP potrebuje vrata, ki so odprta za pošiljanje in prejemanje dohodnih povezav. Pristanišča ne posluša ali sprejema povezav ali zahteve. To se zgodi brez avtentikacije. Poskusite zagnati zgornji strežnik na terminalu in si oglejte, kako deluje.

To je samo preprost strežnik UDP, ki smo ga ustvarili. Naj bo malo bolj zanimivo in tudi nekoliko bolj zapleteno:

"" To je preprost strežnik vtičnic UDP "" uvoz socketimport sys

HOST = “” # Tu lahko poskusite vse razpoložljive vmesnike

PORT = 2924 # Vsako naključno pristanišče, ki ga v oknu ali Linuxu distros ne uporabljajo privzeto

# Kodiranje UDP vtičnice

poskusi:

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

natisni "Socket inicializiran" "

razen socket.error, msg:

natisni »Ustvarjanje vtičnice ni uspelo. Pojavila se je naslednja napaka: "+ str (msg (0)) +" Message "+ msg (1)

sys.exit ()

# Zdaj moramo to vtičnico privezati na zgornji gostitelj in vrata

poskusi:

s.bind ((HOST, PORT))

razen socket.error, msg:

natis “Vezava vtičnica ni uspela. Po napaki je prekinjena vezava: "+ str (msg (0)) +" sporočilo "+ msg (1)

sys.exit ()

natisni "Dokončana vezava vtičnice"

#Vzdržujte vzpostavljeno povezavo

medtem ko 1:

# zajemanje podatkov odjemalca z uporabo spremenljivih podatkov in naslova

d = s.recv od (1024)

podatki = d (0)

naslov = d (1)

če ne podatki:

zlom

odgovor = 'V redu …' + podatki

s.sendto (odgovor, naslov)

natisni sporočilo "Token" ("+ naslov (0) +": '+ str (naslov (1)) +') - '+ data.strip ()

s.close ()

Zaženite zgornji program in na vratih 2924 zaženete strežnik UDP. Čestitamo, da ste uspešno ustvarili Socket v Pythonu. In prepričajte se, da upoštevate, da strežnik UDP lahko obvladuje množice odjemalcev za razliko od TCP strežnika, glavni razlog pa je, da v strežniku UDP ni fiksne povezljivosti, kot v primeru strežnika TCP.

Priporočeni tečaji

  • Certifikacijski tečaj v Ruby Debugging
  • Tečaj PHP MySQL
  • VB.NET tečaj certificiranja programiranja
  • Celotno usposabljanje za fundacijo ITIL
  • Programiranje odjemalcev UDP

Zdaj, ko smo uspešno ustvarili strežnik UDP, potrebujemo stranko, da vzpostavi ustrezno povezavo z njim, tako da vemo, kako deluje. Torej, delajmo na ustvarjanju ustreznega odjemalca UDP v Pythonu. Ta odjemalec se bo povezal z našim strežnikom UDP, ki smo ga ustvarili zgoraj:

"" Ustvarjanje preprostih UDP odjemalcev za odjemalca "" uvoz socketimport sys

# Ustvarjanje vtičnice UDP

poskusi:

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

razen socket.error:

natisni "Nastavitev vtičnice ni uspela"

sys.exit ()

gostitelj = '127.0.0.1'; # Prav tako lahko poskusite uporabiti localhost insead tega IP-ja, oba sta enaka.

pristanišče = 2924;

medtem ko (1):

msg = raw_input ('Vnesite sporočilo, ki ga želite poslati strežniku:')

poskusi:

#Zdaj moramo nastaviti strune

s.sendto (msg, (gostitelj, pristanišče))

# Zdaj moramo prejeti podatke in naslove od stranke s pomočjo podatkov in naslova

d = s.recv od (1024)

odgovor = d (0)

naslov = d (1)

natisni "Odgovor s strežnika je:" + odgovor

razen socket.error, msg:

natisni 'Po pojavu napake:' + str (msg (0)) + 'Sporočilo' + msg (1)

sys.exit ()

Ja. Ustvarjanje odjemalca UDP v programiranju Python Socket je veliko lažje kot ustvarjanje strežnika UDP. A tako gre. Mislim, da mi ne bi bilo treba razlagati ničesar iz zgornjega dela kode, saj sem vse zahtevane stvari že omenil v komentarjih # tag. Prepričajte se, da sta IP naslov in vrata, ki ste jih vnesli, pravilna in vaš požarni zid ne blokira povezave, sicer bo vedno prišlo do okvare ne glede na vse.

  • Programiranje TCP vtičnic

Zdaj, ko smo se naučili, kako ustvariti odjemalec UDP in strežnik, si oglejmo programiranje TCP vtičnic. Tu bomo uporabili isto funkcijo socket.socket in ustvarili TCP vtičnico.

uvoz socket # Uvoz vtičnice modula iz knjižnic python # ustvari AF_INET in pretoči socketss = socket.socket (socket.AF_INET, socket.SOCK_STREAM) natisni "Socket Creation uspješno"

Tu se AF_INET uporablja za naslovno povezavo Ipv4, tok nogavic pa protokol, usmerjen v TCP. To je preprosta TCP vtičnica, ki smo jo ustvarili. Zdaj bomo ustvarjali napredno različico iste stvari. Tudi tukaj bomo vrgli izjeme, enako kot smo ga vrgli pri ustvarjanju strežnikov in odjemalcev UDP, tako da bomo v primeru, da povezljivost ne uspe, vedeli, kje leži dejanski program. Socket.error bo uporabljen za obravnavo vseh teh napak, podobnih kot pri programiranju UDP.

Zdaj lahko ustvarimo vtičnico z zgornjim ravnanjem napak in se povežemo z gostiteljskim facebook.com. Tako je treba to storiti:

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

razen socket.error, msg:

natisni 'Ustvarjanje vtičnice ni uspelo. Pojavila se je naslednja napaka: '+ str (msg (0)) +', sporočilo o napaki: '+ msg (1)

sys.exit ();

natisni "Ustvarjanje vtičnic uspešno"

host = 'www.facebook.com'

pristanišče = 2924

poskusi:

remote_ip = socket.gethostbyname (gostitelj)

razen socket.gaierror:

natisni 'Neprimerno ime gostitelja. Izhod … '

sys.exit ()

natisni "+ gostitelj + IP naslov" je "+ remote_ip

s.connect ((remote_ip, port))

natisnite "Socket Connected to" + host + "on ip" + remote_ip

Zdaj je to dovolj, če moramo samo vzpostaviti povezavo. A to ni naš cilj. Nameravamo vzpostaviti povezavo, kjer bomo lahko pošiljali in prejemali tudi podatke na obeh koncih. Podatke lahko pošljemo s funkcijo sendall. Torej, kako gre:

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

razen socket.error, msg:

natisni 'Ustvarjanje vtičnice ni uspelo. Pojavila se je naslednja napaka: '+ str (msg (0)) +', sporočilo o napaki: '+ msg (1)

sys.exit ();

natisni "Ustvarjanje vtičnic uspešno"

host = 'www.facebook.com'

pristanišče = 2924

poskusi:

remote_ip = socket.gethostbyname (gostitelj)

razen socket.gaierror:

natisni 'Neprimerno ime gostitelja. Izhod … '

sys.exit ()

natisni "+ gostitelj + IP naslov" je "+ remote_ip

s.connect ((remote_ip, port))

natisnite "Socket Connected to" + host + "on ip" + remote_ip

#transferiranje podatkov s funkcijo sendall

sporočilo = “GET / HTTP / 1.1 \ r \ n \ r \ n”

poskusi:

s.sendall (sporočilo)

razen socket.error:

#Pošiljanje ni uspelo

natisni "Neuspeh pri prenosu"

sys.exit ()

natisni 'Status sporočila: Poslano'

Zdaj, ko smo vzpostavili uspešno povezavo in lahko pošiljamo tudi podatke, si poglejmo, kako bi lahko podatke sprejeli v celoti. Takole gre:

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

razen socket.error, msg:

natisni 'Ustvarjanje vtičnice ni uspelo. Pojavila se je naslednja napaka: '+ str (msg (0)) +', sporočilo o napaki: '+ msg (1)

sys.exit ();

natisni "Ustvarjanje vtičnic uspešno"

host = 'www.facebook.com'

pristanišče = 2924

poskusi:

remote_ip = socket.gethostbyname (gostitelj)

razen socket.gaierror:

natisni 'Neprimerno ime gostitelja. Izhod … '

sys.exit ()

natisni "+ gostitelj + IP naslov" je "+ remote_ip

s.connect ((remote_ip, port))

natisnite "Socket Connected to" + host + "on ip" + remote_ip

#transferiranje podatkov s funkcijo sendall

sporočilo = “GET / HTTP / 1.1 \ r \ n \ r \ n”

poskusi:

s.sendall (sporočilo)

razen socket.error:

#Pošiljanje ni uspelo

natisni "Neuspeh pri prenosu"

sys.exit ()

natisni 'Status sporočila: Poslano'

#Zdaj za sprejemanje podatkov uporabljamo funkcijo recv

odgovor = s.recv (4096)

natisni odgovor

Končna stvar je, da moramo zapreti vtičnico, ki jo lahko naredimo z naslednjo kodo:

s.close ()

In končno zavezujoči del. S funkcijo bind lahko vežemo vtičnice z ip naslovi in ​​pristanišči.

uvoz socketimport sysHOST = ”#To je podobno kot pri protokolu UDPPORTPORT = 2924 # vrata za dostop do podatkov.

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

natisni "Ustvarjanje vtičnice uspešno"

poskusi:

s.bind ((HOST, PORT))

razen socket.error, msg:

natis 'Vezava ni uspela. Po napaki, ki se je zgodila '+ str (msg (0)) +' Sporočilo '+ msg (1)

sys.exit ()

natisni "Vtičnica je uspešna"

Zdaj moramo poslušati dohodne za dohodne povezave, če potrebujemo strežnik za povezavo. To lahko storite z naslednjim preprostim ukazom:

s.listen (10) natisni "Začetek poslušalca"

In končno moramo ustvariti vtičnico, da bomo sprejeli te povezave:

uvoz socketimport sysHOST = ”PORT = 2924

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

natisni "Ustvarjanje vtičnic uspešno"

poskusi:

s.bind ((HOST, PORT))

razen socket.error, msg:

natis 'Vezava ni uspela. Po napaki je prišlo '+ str (msg (0)) +' sporočilo '+ msg (1)

sys.exit ()

natisni "Uspešna vezava vtičnice"

podnaslov (10)

natisni »Začetek poslušalca«

# Sprejemanje povezav

conn, addr = s.accept ()

#Prevajanje informacij o povezanih odjemalcih

natisni 'Povezava vzpostavljena z' + addr (0) + ':' + str (addr (1))

Temu je v resnici še veliko več. Lahko tudi napišemo kode za obdelovalce in druge stvari. Mislim pa, da bi bilo to za zdaj. Prepričajte se, da imate te osnove pravilne, po katerih so preostali deli le kos torte, ki se ga naučite.

Prvi vir slike: pixabay.com

Povezani članki:-

Tukaj je nekaj člankov, ki vam bodo pomagali do podrobnosti o programiranju vtičnic Python, zato pojdite po povezavi.

  1. 25 najbolj neverjetnih vprašanj in odgovorov na Python Intervju
  2. Kariera v Pythonu
  3. Kakšne so prednosti in omejitve uporabe Pythona?
  4. Pomembna razlika Python proti Ruby Performance
  5. Uvod v programiranje vtičnic v PHP
  6. Programiranje vtičnic na Javi | Metoda razreda vtičnic