Programiranje Python Socket-a - Prije nego što započnem s programiranjem Python Socket-a, nadam se da imate dobre temelje Python-ove utičnice. Ako i Django poznajete, bilo bi ga još lakše razumjeti. Ne, programiranje socket-a nije povezano s Django-om, ali terminologije u programiranju utičnica Python-a i Django gotovo su iste iako su dvije različite kategorije. Za početak, što je točno programiranje Python Socket-a? Programiranje Python Socket-a ne postoji samo u pythonu, već i u Javi i gotovo svim ostalim programskim jezicima. Ali u slučaju pythona, programiranje socket-a zapravo je vrlo lako razumjeti. Python Socket programiranje znači mrežno programiranje. Uključuje kodove na strani klijenta i Python Socket poslužitelje. Ali ta je definicija podjednako dobra kao što se knjiga koja govori o programiranju C koristi za razvoj softvera. I ne, nisam ovdje zbog toga. Ovdje sam kako bih vam osigurao dublje razumijevanje osnova programiranja utičnica Python, prije nego što zapravo počnete pisati vlastite module utičnica. Dakle, pokrenimo i pogledajte kako socket radi bilo na strani klijenta ili na strani poslužitelja Python Socket.

Što je programiranje utičnice Python?

Ako ste naučili programiranje C-a, tada bi učenje Python socket programa u Pythonu bilo vrlo jednostavno jer su gotovo isti. Da bi to bilo jednostavnije, programiranje utičnica python samo je komad koda kako računala u mreži međusobno komuniciraju. A to se ne završava samo LAN temeljenom na mreži, već podržava i WAN, MAN i intranet mreže. Čak i utičnice koristimo u svakodnevnom životu. Ne razumijem? Dopustite mi da vam dam jedan jednostavan primjer. Kad se želite povezati s recimo Facebook.com, jednostavno upišite istu stvar u URL traku. Dakle, ova veza koju ste upravo stvorili nije samo stvorena DNS stvarima. Sve je to konfigurirano putem programiranja utičnice python. Utičnice odlučuju kako dvije mreže komuniciraju. Svaka komunikacija koja prolazi kroz mrežu, može biti video, VOIP veze ili samo tekst; sve prolazi kroz utičnicu. Sada kada znamo što su utičnice, dozvolimo da razvijemo vlastitu utičnicu u pythonu.

Izvor slike: pixabay.com

Vrste programiranja utičnice Python

Sad su vani gomile utičnica. Ali nećemo razgovarati o svima njima jer ovdje ne mogu pokriti svakoga. Možete stvoriti ili UDP utičnicu, TCP utičnicu ili čak utičnicu i još mnogo toga ako nastavim. Ali danas bih se više pozabavio TCP i UDP utičnicama, jer su oni osnovna osnova i mogu biti izuzetno dobri kao početnik za početak rada s programiranjem Python Socket-a.

  • Programiranje UDP utičnica

User Datagram Protocol ili njegov uobičajeni naziv UDP alternativni je protokol TCP-u koji prenosi pakete s jednog domaćina na drugi. Ali za razliku od TCP (protokol za kontrolu prijenosa), UDP je protokol bez veze i orijentiran je na stream. To znači da će UDP poslužitelj hvatati samo dolazne pakete iz čitavog računala bez identificiranja pouzdane izvorne veze. Za to ćemo upotrijebiti funkciju socket.socket. Jednostavna UDP utičnica kreirana je na Python na sljedeći način:

import socket #importing socket module from python library # Sada moramo stvoriti AF_INET i sock dgram socketss = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) ispisati „Socket Creation uspješno“

Da. To je to i stvorili smo jednostavnu UDP utičnicu ovdje u pythonu. Programiranje Python Socket-a ili čak stvaranje jednostavne utičnice nije raketna znanost. No, velika stvar leži u kodiranju UDP poslužitelja i klijenta. Budući da UDP utičnice nisu povezane, započinju se naredbe s funkcijama slanja i primanja utičnica. Ove funkcije ne zahtijevaju da se međusobno povezu. Oni zapravo mogu slati i primati pakete iz bilo kojeg slučajnog izvora. Evo kako se stvara UDP Server:

import socketport = 2924s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) s.bind (("", port)) ispis "Zahtjev za povezivanje na ulaz na računalu", port

dok je 1:

podaci, adresa = s.recvfrom (1024)

ispis podataka

To se možda ne čini mnogo, ali tako je zapravo stvoreno. Ovdje se može koristiti bilo koji port. Upravo sam odabrao slučajni kao 2924. UDP poslužitelju treba biti otvoren port za slanje i primanje dolaznih veza. Nema slušanja porta ili prihvaćanje veza ili zahtjeva. To se jednostavno događa bez autentifikacije. Pokušajte pokrenuti gornji poslužitelj na terminalu i vidjeti kako to funkcionira.

Ovo je samo jednostavan UDP Server koji smo stvorili. Omogućimo to malo zanimljivijim i isto tako malo složenijim:

"" Ovo je jednostavan poslužitelj UDP socket "" uvoz socketimport sys

HOST = "" # Ovdje možete isprobati sva dostupna sučelja

PORT = 2924 # Bilo koji slučajni priključak koji se ne upotrebljava na Windows ili Linux distros

# Kodiranje UDP utičnice

probaj:

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

ispis "Socket inicijalized" "

osim socket.error, msg:

ispis „Stvaranje utičnice nije uspjelo. Došlo je do sljedeće pogreške: "+ str (msg (0)) + 'Poruka' + msg (1)

sys.exit ()

# Sada moramo vezati ovu utičnicu na gornji host i port

probati:

s.bind ((HOST, PORT))

osim socket.error, msg:

Ispis „Binding Socket failed. Nakon pogreške prekinuta je veza: "+ str (msg (0)) +" Poruka "+ msg (1)

sys.exit ()

ispis 'Dovršeno vezanje utičnice'

# Održavajte uspostavljenu vezu

dok je 1:

# snimanje podataka od klijenta koristeći promjenjive podatke i adresu

d = s.recvfrom (1024)

podaci = d (0)

adresa = d (1)

ako ne podaci:

pauza

odgovor = 'u redu …' + podaci

s.sendto (odgovor, adresa)

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

s.close ()

Pokrenite gornji program i pokrenut ćete UDP Server na priključku 2924. Čestitamo, uspješno ste stvorili Socket u Pythonu. Pazite da imate na umu da UDP poslužitelj može podnijeti mnoštvo klijenata za razliku od TCP poslužitelja, a glavni razlog je što nema fiksnog povezivanja na UDP poslužitelju kao u slučaju TCP poslužitelja.

Preporučeni tečajevi

  • Certifikacijski tečaj u Ruby Debuggingu
  • PHP MySQL tečaj
  • VB.NET tečaj za certificiranje programiranja
  • Kompletna obuka zaklade ITIL
  • Programiranje UDP klijenta

Sada, kad smo uspješno stvorili UDP Server, potreban nam je klijent da uspostavi ispravnu vezu s njim kako bismo znali njegov rad. Znači, radimo na stvaranju odgovarajućeg UDP klijenta u Pythonu. Ovaj klijent će se povezati s našim UDP poslužiteljem koji smo stvorili gore:

"" Stvaranje jednostavnih UDP klijenata usadnih utičnica "" uvoz socketimport sys

# Stvaranje UDP utičnice

probati:

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

osim socket.error:

ispis "Stvaranje utičnice nije uspjelo"

sys.exit ()

host = '127.0.0.1'; # Također možete pokušati upotrijebiti localhost insead ovog IP-a, oba su ista.

port = 2924;

dok je (1):

msg = raw_input ('Upišite poruku koju treba poslati poslužitelju:')

probaj:

# Sada moramo postaviti žice

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

# Sada moramo dobiti podatke i adresu klijenta koristeći podatke i adresu

d = s.recvfrom (1024)

odgovor = d (0)

adresa = d (1)

print 'Odgovor sa poslužitelja je:' + odgovor

osim socket.error, msg:

ispis 'Pojavila se pogreška:' + str (msg (0)) + 'Poruka' + msg (1)

sys.exit ()

Yup. Stvaranje UDP klijenta u programiranju Python Socket-a mnogo je lakše nego stvaranje UDP poslužitelja. Ali tako to ide. Mislim da ne bih trebao ništa objašnjavati iz gornjeg dijela koda, jer sam sve potrebne stvari već spomenuo u komentarima # tag. Samo provjerite jesu li IP adresa i port koji ste unijeli ispravni, a vaš vatrozid ne blokira vezu, u protivnom će uvijek doći do neuspjeha bez obzira na sve.

  • Programiranje TCP utičnica

Sada kada smo naučili kako stvoriti UDP klijent i Server, pogledajmo programiranje TCP utičnica. Ovdje ćemo koristiti istu funkciju socket.socket za stvaranje TCP utičnice.

import socket # Uvoz socket modula iz knjižnica python # stvoriti AF_INET i streaming socketss = socket.socket (socket.AF_INET, socket.SOCK_STREAM) ispis "Socket Creation uspješno"

Ovdje se AF_INET koristi za vezu adrese Ipv4, a čarapa je protokol orijentiran na TCP. Ovo je jednostavna TCP utičnica koju smo stvorili. Sada ćemo kreirati naprednu verziju iste stvari. Ovdje ćemo izuzeti i iznimke, na isti način na koji smo ga bacili prilikom izrade UDP poslužitelja i klijenata, tako da u slučaju da povezanost ne uspije, znat ćemo gdje se nalazi stvarni program. Socket.error koristit će se za obradu svih ovih pogrešaka sličnih onima u UDP programiranju.

Dakle, sada omogućujemo stvaranje utičnice s gore opisanim postupkom o pogrešci i povezivanje s host facebook.com. Ovo treba učiniti na sljedeći način:

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

osim socket.error, msg:

print 'Stvaranje utičnice nije uspjelo. Došlo je do sljedeće pogreške: '+ str (msg (0)) +', poruka o pogrešci: '+ msg (1)

sys.exit ();

ispis "Stvaranje utičnice uspješno"

host = 'www.facebook.com'

port = 2924

probati:

remote_ip = socket.gethostbyname (host)

osim socket.gaierror:

ispisati 'Nepropisno ime računala. Izlaz …”

sys.exit ()

ispis "+ host + IP adresa" je "+ remote_ip

s.connect ((remote_ip, port))

ispisati "Socket spojen na" + host + "na ip" + remote_ip

Sad je to dovoljno ako samo moramo uspostaviti vezu. Ali to nije naš cilj. Namjeravamo uspostaviti vezu gdje bismo mogli slati i primati podatke na oba kraja. Podatke možemo poslati pomoću funkcije sendall. Dakle, evo kako to ide:

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

osim socket.error, msg:

print 'Stvaranje utičnice nije uspjelo. Došlo je do sljedeće pogreške: '+ str (msg (0)) +', poruka o pogrešci: '+ msg (1)

sys.exit ();

ispis "Stvaranje utičnice uspješno"

host = 'www.facebook.com'

port = 2924

probati:

remote_ip = socket.gethostbyname (host)

osim socket.gaierror:

ispisati 'Nepropisno ime računala. Izlaz …”

sys.exit ()

ispis "+ host + IP adresa" je "+ remote_ip

s.connect ((remote_ip, port))

ispisati "Socket spojen na" + host + "na ip" + remote_ip

#transferiranje podataka pomoću funkcije sendall

poruka = ​​"GET / HTTP / 1.1 \ r \ n \ r \ n"

probaj:

s.sendall (poruka)

osim socket.error:

#Pošiljanje nije uspjelo

ispis "Neuspjeh prijenosa"

sys.exit ()

ispis "Status poruke: Poslano"

Sada, kada smo stvorili uspješnu vezu i također možemo slati podatke, pogledajmo kako bismo mogli u potpunosti primiti podatke. Evo kako to ide:

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

osim socket.error, msg:

print 'Stvaranje utičnice nije uspjelo. Došlo je do sljedeće pogreške: '+ str (msg (0)) +', poruka o pogrešci: '+ msg (1)

sys.exit ();

ispis "Stvaranje utičnice uspješno"

host = 'www.facebook.com'

port = 2924

probati:

remote_ip = socket.gethostbyname (host)

osim socket.gaierror:

ispisati 'Nepropisno ime računala. Izlaz …”

sys.exit ()

ispis "+ host + IP adresa" je "+ remote_ip

s.connect ((remote_ip, port))

ispisati "Socket spojen na" + host + "na ip" + remote_ip

#transferiranje podataka pomoću funkcije sendall

poruka = ​​"GET / HTTP / 1.1 \ r \ n \ r \ n"

probaj:

s.sendall (poruka)

osim socket.error:

#Pošiljanje nije uspjelo

ispis "Neuspjeh prijenosa"

sys.exit ()

ispis "Status poruke: Poslano"

#Sada, kako bismo dobili podatke, za realizaciju koristimo funkciju recv

odgovor = s.recv (4096)

ispis odgovora

Konačna stvar je da trebamo zatvoriti utičnicu da bismo to mogli učiniti sljedećim kodom:

s.close ()

I na kraju, obvezujući dio. Pomoću funkcije bind možemo povezati utičnice s ip adresama i portovima.

import socketimport sysHOST = ”#Ovo je isti način kao i UDP protokolPORT = 2924 # port za pristup podacima.

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

ispis "Stvaranje socket uspješno"

probati:

s.bind ((HOST, PORT))

osim socket.error, msg:

print 'Veza nije uspjela. Nakon pogreške nastale '+ str (msg (0)) +' Poruka '+ msg (1)

sys.exit ()

ispis "Uspješno vezivanje"

Sada moramo slušati dolazne za dolazne veze ako nam je potreban poslužitelj za povezivanje. To se može učiniti pomoću sljedeće jednostavne naredbe:

s.listen (10) ispis 'Slušatelj je počeo'

I na kraju, moramo stvoriti utičnicu da bismo prihvatili ove veze:

import socketimport sysHOST = ”PORT = 2924

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

ispis "Stvaranje utičnice uspješno"

probati:

s.bind ((HOST, PORT))

osim socket.error, msg:

print 'Veza nije uspjela. Došlo je do sljedeće pogreške '+ str (msg (0)) +' Poruka '+ msg (1)

sys.exit ()

ispis "Uspješno vezivanje utičnice"

s.listen (10)

ispis "Slušatelj je pokrenut"

# Prihvaćanje veza

conn, addr = s.accept ()

#Pružanje informacija o povezanim klijentima

ispisati "Veza uspostavljena s" + addr (0) + ": '+ str (addr (1))

Zapravo je tome puno više. Također možemo napisati kodove za rukovatelje i druge stvari. Ali mislim da bi to zasad bilo to. Obavezno provjerite jesu li ove osnove ispravne, nakon čega su preostali dijelovi samo komad torte za naučiti.

Prvi izvor slike: pixabay.com

Povezani članci:-

Evo nekoliko članaka koji će vam pomoći da saznate više detalja o Python Socket Programiranju pa samo prođite vezu.

  1. 25 najneverovatnijih pitanja i odgovora na Python Intervju
  2. Karijere u Pythonu
  3. Koje su prednosti i ograničenja upotrebe Pythona?
  4. Važna razlika Python u odnosu na performanse Ruby
  5. Uvod u Socket programiranje u PHP-u
  6. Programiranje utičnica na Javi | Metoda klase utičnice

Kategorija: