Programare Python Socket - Înainte de a începe cu programarea Python Socket, sper să aveți elemente de bază bune în Python. Dacă îl cunoașteți și pe Django, atunci ar fi și mai ușor de înțeles. Nu, programarea socket-ului nu are legătură cu Django, dar terminologiile din programarea socket-ului Python și Django sunt aproape aceleași, deși sunt două categorii diferite. Deci, pentru a începe, care este exact programul Python Socket? Programarea Python Socket nu se găsește doar în python, ci și în Java și aproape în toate celelalte limbaje de programare. Dar în cazul pitonului, programarea prizelor este de fapt foarte ușor de înțeles. Programarea Python Socket înseamnă programare în rețea. Include coduri legate de partea clientului și codurile legate de serverul Python Socket. Dar această definiție este la fel de bună ca o programare de carte C care este folosită pentru a dezvolta software. Și nu, nu sunt aici pentru asta. Sunt aici pentru a vă asigura că veți obține o înțelegere mai profundă asupra elementelor de bază ale programării socket-ului Python, înainte de a începe să scrieți propriile module de priză. Așadar, să începem și să vedem cum funcționează socket-ul fie pe partea clientului, fie pe serverul Python Socket.

Ce este programarea Python Socket?

Dacă ați învățat programarea C, atunci învățarea programării prizelor piton în Python ar fi foarte ușoară, deoarece sunt aproape aceleași. Pentru a o face mai simplă, programarea socket-ului Python reprezintă doar coduri cu privire la modul în care computerele dintr-o rețea comunică între ele. Și acest lucru nu se termină doar cu o rețea bazată pe LAN, ci acceptă și rețele WAN, MAN și intranet. Folosim chiar prize în viața noastră de zi cu zi. Nu înțeleg? Permiteți-mi să vă dau un exemplu simplu. Când doriți să vă conectați pentru a permite să spunem Facebook.com, introduceți același lucru în bara URL. Deci, această conexiune pe care tocmai ați creat-o nu este creată doar de lucrurile DNS. Toate acestea sunt configurate prin programarea socket-ului python. Socket-urile decid modul în care comunică două rețele. Orice comunicare printr-o rețea, poate fi un videoclip, conexiuni VOIP sau doar text; totul trece printr-o priză. Acum că știm care sunt soclurile, permiteți-ne să dezvoltăm propria priză în python.

Sursa imaginii: pixabay.com

Tipuri de programare Python Socket

Acum sunt o mulțime de prize acolo. Dar nu vom vorbi despre toate, deoarece nu le pot acoperi pe toate aici. Puteți crea un soclu UDP, o priză TCP sau chiar o priză de port și sunt multe altele dacă continui. Dar aș analiza mai mult în soclurile TCP și UDP, deoarece acestea sunt cele mai de bază și pot fi extrem de bune ca punct de început pentru a începe programarea Python Socket.

  • Programarea soclurilor UDP

User Datagram Protocol sau cunoscut în mod obișnuit ca UDP este un protocol alternativ la TCP care transferă pachetele de la o gazdă la alta. Spre deosebire de TCP (protocol de control al transmisiei), UDP este un protocol fără conexiune și este orientat non-stream. Aceasta înseamnă că serverul UDP va captura doar pachetele primite de la toată gazda fără a identifica o conexiune sursă fiabilă. Vom folosi funcția socket.socket pentru a face acest lucru. Un soclu UDP simplu este creat în modul următor în Python:

import socket #importing socket module din python library # Acum trebuie să creăm AF_INET și sock dgram socketss = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) print „Socket Creation Successful”

Da. Asta este și am creat o priză simplă UDP aici în python. Python Socket Programarea sau chiar crearea unei prize simple nu este o știință a rachetelor. Cu toate acestea, marele lucru constă în codificarea serverului UDP și a clientului. Deoarece soclurile UDP sunt fără conexiune, comenzile sunt inițiate cu funcțiile de socket de trimitere și primire. Aceste funcții nu necesită conectarea lor între ele. Ele pot efectiv trimite și primi pachete din orice sursă aleatorie. Iată cum este creat un server UDP:

import socketport = 2924s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) s.bind ((„”, port)) tipăriți „Solicitați conectivitate la portul mașinii”, port

în timp ce 1:

date, adresa = s.recvfrom (1024)

imprima date

Acest lucru poate să nu pară mult, dar așa este creat de fapt. Se poate folosi orice port aici. Tocmai am ales unul întâmplător ca 2924. Serverul UDP are nevoie de un port pentru a fi deschis pentru a trimite și primi conexiuni primite. Nu se ascultă portul, nu se acceptă conexiuni sau solicitări. Se întâmplă doar fără nicio autentificare. Încercați să rulați serverul de mai sus pe un terminal și vedeți cum funcționează.

Acesta este doar un simplu UDP Server pe care l-am creat. Permiteți-l să fie ceva mai interesant și, de asemenea, un pic mai complicat:

„„ Acesta este un simplu socket server UDP ”„ import socketimport sys

HOST = „” # Unul poate încerca aici toate interfețele disponibile

PORT = 2924 # Orice port aleatoriu care nu este utilizat în mod implicit pe Windows sau distros Linux

# Codarea soclului UDP

încerca :

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

imprimați „Socket inițializat”

cu excepția socket.error, msg:

print „Crearea soclului a eșuat. A apărut următoarea eroare: ”+ str (msg (0)) +„ Mesaj ”+ msg (1)

sys.exit ()

# Acum trebuie să conectăm această priză la gazda și portul de mai sus

încerca:

s.bind ((HOST, PORT))

cu excepția socket.error, msg:

imprimați „Socket de legare nu a reușit. Următoarea eroare a întrerupt legarea: ”+ str (msg (0)) +„ Mesaj ”+ msg (1)

sys.exit ()

imprimați „Legarea prizelor finalizate”

# Mențineți conexiunea stabilită

în timp ce 1:

# captură date de la client folosind date și adresă variabile

d = s.recvfrom (1024)

date = d (0)

adresa = d (1)

dacă nu date:

pauză

raspunde = 'OK …' + date

s.sendto (răspuns, adresă)

imprimați „Token message ('+ adresa (0) +': '+ str (adresa (1)) +') - '+ data.strip ()

s.close ()

Rulați programul de mai sus și veți porni un server UDP pe portul 2924. Felicitări, ați creat cu succes un Socket în Python. Și asigurați-vă că observați că, un server UDP poate gestiona o mulțime de clienți spre deosebire de serverul TCP, motivul principal fiind că nu există o conectivitate fixă ​​într-un server UDP, cum ar fi în cazul unui server TCP.

Cursuri recomandate

  • Curs de certificare în depanare Ruby
  • Curs PHP MySQL
  • Curs de certificare a programării VB.NET
  • Instruire completă a fundației ITIL
  • Programare client UDP

Acum, că am creat cu succes un server UDP, avem nevoie de un client care să stabilească o conexiune adecvată la acesta, astfel încât să știm funcționarea acestuia. Deci, să lucrăm la crearea unui client UDP corespunzător în Python. Acest Client se va conecta la serverul nostru UDP pe care l-am creat mai sus:

”„ Crearea unui client UDP simplu usind sockets ”import socketimport

# Crearea unui soclu UDP

încerca:

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

cu excepția socket.error:

print „Socket Creation failed”

sys.exit ()

gazdă = '127.0.0.1'; # Puteți încerca, de asemenea, să utilizați localhost insead din acest IP, ambele sunt la fel.

port = 2924;

în timp ce (1):

msg = raw_input ('Introduceți un mesaj pe care să-l trimiteți serverului:')

încerca :

#Acum trebuie să setăm șirurile

s.sendto (msg, (gazdă, port))

# Acum trebuie să primim datele și adresele de la client folosind date și adresă

d = s.recvfrom (1024)

raspuns = d (0)

adresa = d (1)

print "Răspuns de pe server este:" + răspuns

cu excepția socket.error, msg:

imprima 'A apărut eroarea următoare:' + str (msg (0)) + 'Mesaj' + msg (1)

sys.exit ()

Da. Crearea unui client UDP în programarea Python Socket este mult mai ușoară decât crearea unui server UDP. Dar așa merge. Nu cred că ar trebui să explic nimic din codul de mai sus, deoarece am menționat deja toate lucrurile necesare în comentariile # tag. Doar asigurați-vă că adresa IP și portul pe care l-ați introdus sunt corecte și firewallul dvs. nu blochează conexiunea, altfel va avea ca rezultat întotdeauna eșecul indiferent de situație.

  • Programare soclu TCP

Acum că am învățat cum să creăm un client și un server UDP, să aruncăm o privire asupra soclurilor TCP de programare. Vom folosi aceeași funcție socket.socket pentru a crea o priză TCP aici.

import socket # Importarea soclului modulului din bibliotecile python # creează un AF_INET și stream socketss = socket.socket (socket.AF_INET, socket.SOCK_STREAM) print „Socket Creation Successful”

Aici, AF_INET este utilizat pentru conexiunea la adresă Ipv4, iar fluxul sock este un protocol orientat TCP. Acesta este un soclu TCP simplu pe care l-am creat. Acum, vom crea o versiune avansată a aceluiași lucru. Vom arunca și aici excepții, la fel cum le-am aruncat atunci când creăm Servere și Clienți UDP, astfel încât, în cazul în care conectarea eșuează, vom ști unde se află programul propriu-zis. Socket.error va fi utilizat pentru a gestiona toate aceste erori similare cu cele ale programării UDP.

Așadar, acum permiteți crearea unei prize cu gestionarea erorilor de mai sus și conectați-vă la gazda facebook.com. Așa trebuie făcut:

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

cu excepția socket.error, msg:

print "Socket Creation a eșuat. A apărut următoarea eroare: '+ str (msg (0)) +', mesaj de eroare: '+ msg (1)

sys.exit ();

tipăriți „Socket Creation succes”

host = 'www.facebook.com'

port = 2924

încerca:

remote_ip = socket.gethostbyname (gazdă)

cu excepția socket.gaierror:

tipăriți „Numele de gazdă incorect. Părăsirea …“

sys.exit ()

print ”+ gazdă + adresă IP” este ”+ remote_ip

s.connect ((remote_ip, port))

imprimați 'Socket Conectat la' + gazdă + 'pe ip' + remote_ip

Acum este suficient dacă trebuie să pornim doar o conexiune. Dar acesta nu este scopul nostru. Intenționăm să creăm o conexiune unde să putem trimite și să primim și date pe ambele capete. Putem trimite date folosind funcția sendall. Iată cum merge:

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

cu excepția socket.error, msg:

print "Socket Creation a eșuat. A apărut următoarea eroare: '+ str (msg (0)) +', mesaj de eroare: '+ msg (1)

sys.exit ();

tipăriți „Socket Creation succes”

host = 'www.facebook.com'

port = 2924

încerca:

remote_ip = socket.gethostbyname (gazdă)

cu excepția socket.gaierror:

tipăriți „Numele de gazdă incorect. Părăsirea …“

sys.exit ()

print ”+ gazdă + adresă IP” este ”+ remote_ip

s.connect ((remote_ip, port))

imprimați 'Socket Conectat la' + gazdă + 'pe ip' + remote_ip

#transferarea datelor folosind funcția sendall

message = "GET / HTTP / 1.1 \ r \ n \ r \ n"

încerca :

s.sendall (mesaj)

cu excepția socket.error:

# Trimiterea a eșuat

tipăriți „Eșecul transmisiei”

sys.exit ()

imprimați „Stare mesaj: trimis”

Acum, că am creat o conexiune de succes și putem trimite și datele, să aruncăm o privire asupra modului în care am putea primi datele cu totul. Așa se face:

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

cu excepția socket.error, msg:

print "Socket Creation a eșuat. A apărut următoarea eroare: '+ str (msg (0)) +', mesaj de eroare: '+ msg (1)

sys.exit ();

tipăriți „Socket Creation succes”

host = 'www.facebook.com'

port = 2924

încerca:

remote_ip = socket.gethostbyname (gazdă)

cu excepția socket.gaierror:

tipăriți „Numele de gazdă incorect. Părăsirea …“

sys.exit ()

print ”+ gazdă + adresă IP” este ”+ remote_ip

s.connect ((remote_ip, port))

imprimați 'Socket Conectat la' + gazdă + 'pe ip' + remote_ip

#transferarea datelor folosind funcția sendall

message = "GET / HTTP / 1.1 \ r \ n \ r \ n"

încerca :

s.sendall (mesaj)

cu excepția socket.error:

# Trimiterea a eșuat

tipăriți „Eșecul transmisiei”

sys.exit ()

imprimați „Stare mesaj: trimis”

# Acum pentru a primi date, utilizăm funcția de înregistrare pentru a le realiza

raspuns = s.recv (4096)

răspuns tipărit

Ultimul lucru este că trebuie să închidem soclul pe care l-am putea face cu următorul cod:

s.close ()

Și în final, partea de legare. Putem folosi funcția bind pentru a conecta prize cu adrese IP și porturi.

import socketimport sysHOST = ”#Asta este același mod în care am făcut-o în protocolul UDP = 2924 # port pentru a accesa date.

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

imprimați „Socket crearea de succes”

încerca:

s.bind ((HOST, PORT))

cu excepția socket.error, msg:

tipărirea „Legarea nu a reușit. În urma erorii au apărut '+ str (msg (0)) +' Mesaj '+ msg (1)

sys.exit ()

tipăriți „Socket Binding de succes”

Acum, trebuie să ascultăm conexiunile primite dacă avem nevoie ca serverul să se conecteze. Aceasta se poate face cu următoarea comandă simplă:

s.listen (10) print „Ascultător început”

Și în final, trebuie să creăm o priză pentru a accepta aceste conexiuni:

import socketimport sysHOST = ”PORT = 2924

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

tipăriți „Socket Creation succes”

încerca:

s.bind ((HOST, PORT))

cu excepția socket.error, msg:

tipărirea „Legarea nu a reușit. Următoarea eroare s-a produs '+ str (msg (0)) +' Mesaj '+ msg (1)

sys.exit ()

imprimați „Socket brantare reușită”

s.listen (10)

tipăriți „Ascultătorul a început”

# Acceptarea conexiunilor

conn, addr = s.accept ()

# Furnizarea informațiilor client conectate

imprima 'Conexiune stabilită cu' + addr (0) + ':' + str (addr (1))

Există de fapt mult mai multe în acest sens. De asemenea, putem scrie coduri pentru manipulatori și alte lucruri. Dar cred că asta ar fi deocamdată. Asigurați-vă că aveți aceste elemente de bază corecte, după care părțile rămase sunt doar o bucată de tort pentru a învăța.

Prima sursă de imagine: pixabay.com

Articole similare:-

Iată câteva articole care vă vor ajuta să obțineți mai multe detalii despre programarea Python Socket, așa că treceți doar prin link.

  1. 25 Cele mai uimitoare întrebări și răspunsuri la interviu Python
  2. Cariere în Python
  3. Care sunt avantajele și limitările utilizării Python?
  4. Diferență importantă Performanță Python față de Rubin
  5. Introducere în programarea Socket în PHP
  6. Programare Socket în Java | Metoda clasei de soclu