Què és la programació de sòcol a Python i com dominar-la?



Apreneu què és la programació de sòcol a Python juntament amb les comunicacions client-servidor juntament amb la transferència d’objectes python mitjançant pickle i sòcols.

Internet s’ha convertit indiscutiblement en l ’“ Ànima de l’existència ”i la seva activitat es caracteritza per“ Connexions ”o“ Xarxes ”. Aquestes xarxes són possibles mitjançant un dels fonaments més crucials de Endolls. Aquest article tracta totes les àrees relacionades amb la programació de sòcol a Python. Els sòcols us ajuden a establir aquestes connexions , sens dubte, ho facilita.

Fem una ullada ràpida a tots els temes tractats en aquest article:





Per què utilitzar Sockets?
Què són els sòcols a Python?
Com s'aconsegueix la programació de sòcol a Python
Què és un servidor?
Què és un client?
Echo Client-Server
Comunicacions múltiples
Transferència d'objectes Python



Per què utilitzar Sockets?

Els sòcols són l’eix vertebrador de les xarxes. Permeten la transferència d’informació entre dos programes o dispositius diferents. Per exemple, quan obriu el navegador, com a client esteu creant una connexió amb el servidor per a la transferència d'informació.

Abans d’endinsar-nos en aquesta comunicació, primer descobrim què són exactament aquests sòcols.

Què són els endolls?

En termes generals, els sòcols són extrems interiors creats per enviar i rebre dades. Una única xarxa tindrà dos sòcols, un per a cada dispositiu o programa de comunicació. Aquests connectors són una combinació d’una adreça IP i un port. Un sol dispositiu pot tenir un nombre de sockets ‘n’ en funció del número de port que s’utilitzi. Hi ha diferents ports disponibles per a diferents tipus de protocols. Mireu la imatge següent per obtenir més informació sobre alguns dels números de port habituals i els protocols relacionats:




ports comuns-SocketProgramminginPython-Edureka

Ara que ja teniu clar el concepte de sòcols, fem una ullada al mòdul de sòcol de Python:

Com s'aconsegueix la programació de sòcol a Python:

Per aconseguir la programació de sòcol a Python, haureu d'importar el fitxer endoll mòdul o . Aquest mòdul consta de mètodes integrats que són necessaris per crear sockets i ajudar-los a associar-se entre ells.

Alguns dels mètodes importants són els següents:

MètodesDescripció

socket.socket ()

s'utilitza per crear sòcols (obligatoris tant al servidor com als extrems del client per crear sòcols)

socket.accept ()

solia acceptar una connexió. Retorna un parell de valors (conn, adreça) on conn és un nou objecte de sòcol per enviar o rebre dades i l'adreça és l'adreça del sòcol present a l'altre extrem de la connexió

socket.bind ()

s'utilitza per enllaçar a l'adreça que s'especifica com a paràmetre

socket.close ()

que s’utilitza per marcar el sòcol com a tancat

socket.connect ()

s’utilitza per connectar-se a una adreça remota especificada com a paràmetre

socket.listen ()

permet al servidor acceptar connexions

Ara que heu entès la importància del mòdul de socket, anem a veure com pot servir per crear servidors i clients per a la programació de socket a .

Què és un servidor?

Un servidor és un programa, un ordinador o un dispositiu dedicat a la gestió de recursos de xarxa. Els servidors poden estar al mateix dispositiu o equip o connectats localment a altres dispositius i ordinadors o fins i tot remots. Hi ha diversos tipus de servidors, com ara servidors de bases de dades, servidors de xarxa, servidors d’impressió, etc.

Els servidors solen fer ús de mètodes com socket.socket (), socket.bind (), socket.listen (), etc. per establir una connexió i vincular-se als clients. Ara anem a escriure un programa per crear un servidor. Penseu en el següent exemple:

EXEMPLE:

import socket s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) s.bind ((socket.gethostname (), 1234)) # número de port pot ser qualsevol cosa entre 0-65535 (normalment especifiquem ports no privilegiats que són > 1023) s.listen (5) mentre que True: clt, adr = s.accept () print (f'Connexió a {adr} establert ') La cadena #f és una cadena literal prefixada amb f que #conté expressions python dins de claus .send (bytes ('Socket Programming in Python', 'utf-8')) # per enviar informació a clientsocket

Com podeu veure, la primera necessitat de crear un sòcol és importar el mòdul de sòcol. Després, s'utilitza el mètode socket.socket () per crear un sòcol del servidor.

NOTA:

AF_INET fa referència a l’adreça d’Internet i requereix un parell de (host, port) on l’amfitrió pot ser un URL d’alguns llocs web en concret o la seva adreça i el número de port és un nombre enter. SOCK_STREAM s’utilitza per crear protocols TCP.

El mètode bind () accepta dos paràmetres com a tupla (host, port). Tanmateix, és millor utilitzar números de port de 4 dígits, ja que els inferiors solen estar ocupats. El mètode listen () permet al servidor acceptar connexions. Aquí, 5 és la cua de diverses connexions que apareixen simultàniament. El valor mínim que es pot especificar aquí és 0 (si doneu un valor inferior, canviarà a 0). En cas que no s'especifiqui cap paràmetre, en pren un de predeterminat i adequat.

El permet acceptar connexions per sempre. 'Clt' i 'adr' són l'objecte i l'adreça del client. La declaració d'impressió només imprimeix l'adreça i el número de port del sòcol del client. Finalment, clt.send s’utilitza per enviar les dades en bytes.

és una relació a Java

Ara que el nostre servidor està a punt, anem cap al client.

Què és un client?

Un client és un ordinador o un programari que rep informació o serveis del servidor. En un mòdul client-servidor, les sol·licituds de serveis dels clients dels servidors. El millor exemple és un navegador web com Google Chrome, Firefox, etc. Aquests navegadors web sol·liciten servidors web per a les pàgines i serveis web necessaris segons les instruccions de l’usuari. Altres exemples inclouen jocs en línia, xats en línia, etc.

Ara fem una ullada a com codificar el programa del client :

EXEMPLE:

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

El primer pas és importar el mòdul de sòcol i, a continuació, crear un sòcol igual que vau fer en crear un servidor. A continuació, per crear una connexió entre el client-servidor, haureu d’utilitzar el mètode connect () especificant (host, port).


NOTA: gethostname s'utilitza quan el client i el servidor estan en el mateix ordinador. (LAN - localip / WAN - publicip)

Aquí, el client vol rebre informació del servidor i, per a això, heu d’utilitzar el mètode recv () i la informació s’emmagatzema en una altra variable msg. Tingueu en compte que la informació que es transmet serà en bytes i que el client del programa anterior pot rebre fins a 1024 bytes (mida de memòria intermèdia) en una sola transferència. Es pot especificar a qualsevol quantitat en funció de la quantitat d'informació que es transfereixi.

Finalment, el missatge que es transfereix s’ha de descodificar i imprimir.

Ara que ja sou conscient de com crear programes client-servidor, anem a veure com s’han d’executar.

Servidor client Echo:

Per executar aquests programes, obriu l’indicador d’ordres, accediu a la carpeta on heu creat el programa client i servidor i, a continuació, escriviu:

py server.py (aquí, server.py és el nom del fitxer del servidor, també podeu utilitzar py -3.7 server.py)

Un cop fet això, el servidor comença a funcionar. Per executar el client, obriu una altra finestra cmd i escriviu:

py client.py (aquí, client.py és el nom de fitxer del client)

SORTIDA (SERVIDOR):

(CLIENT)

Proveu el mateix programa reduint la mida de la memòria intermèdia a 7 i vegem quina sortida obtenim:

SORTIDA:

Com podeu veure, la connexió s’acaba després de transferir 7 bytes. Però això és un problema perquè no heu rebut la informació completa i la connexió està tancada. Anem a resoldre aquest problema.

Comunicacions múltiples:

Perquè la connexió continuï fins que el client rebi la informació completa, podeu fer servir el bucle while:

EXEMPLE:

import socket s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) s.connect ((socket.gethostname (), 2346)) mentre és True: msg = s.recv (7) print (msg.decode ('utf- 8 '))

Un cop fet això, el missatge complet es rebrà en 7 bytes per transferència.

Però aquesta vegada, com podeu veure, la connexió no s’acaba i mai no se sap quan passarà. I, per afegir-hi més detalls, què passa si realment no sabeu quant de gran és el missatge o la informació que rebrà el client del servidor. En aquests casos, podeu utilitzar el bit de codi següent al costat del client:

EXEMPLE:

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

Al costat del servidor, utilitzeu el mètode close () de la següent manera:

clt.close ()

La sortida d’aquest serà la que es mostra a la imatge següent:

SORTIDA:



Tot el que fa el bloc de codi anterior és comprovar la mida de la informació i imprimir-la en una memòria intermèdia de dos bytes a la vegada i tancar la connexió un cop finalitzada.

Transferència d'objectes Python:

Fins aquí acabeu de fer la transferència de cordes. Però, programació de sòcol a Python també us permet transferir objectes Python. Aquests objectes poden ser com conjunts, tuples, diccionaris, etc. Per aconseguir-ho, haureu d'importar el mòdul de pickle de Python.

Mòdul d'escabetx Python:

El mòdul d’escabetx Python apareix quan s’està serialitzant o des serialitzant objectes de Python. Vegem un petit exemple,

EXEMPLE:

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

SORTIDA: b’x80x03] qx00 (Kx01Kx02Xx03x00x00x00abcqx01e. '

Com podeu veure, al programa anterior, ‘mylist’ es serialitza mitjançant la funció dumps () del mòdul d’escabetx. Tingueu en compte que la sortida comença amb una 'b', és a dir, que es converteix en bytes. A la programació de sòcol, podeu implementar aquest mòdul per transferir-lo objectes python entre clients i servidors.

Com s’utilitza el mòdul d’escabetx per transferir estructures d’objectes de pitó?

Quan utilitzeu escabetx juntament amb endolls, podeu transferir absolutament qualsevol cosa a través de la xarxa. Anotem la part del servidor i la part del client per transferir una llista del servidor al client:

Al costat del servidor:

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) mentre True: clt, adr = s.accept () print (f'Connexió a {adr} establerta ') m = {1:' Client ', 2:' Servidor '} mymsg = pickle.dumps (m) # el missatge que volem imprimir més tard mymsg = {len (mymsg): {a}} 'utf-8') + mymsg clt.send (mymsg)

Aquí, m és un diccionari que és bàsicament un que s'ha d'enviar des del servidor al client. Això es fa primer serialitzant l'objecte mitjançant dumps () i després convertint-lo en bytes.
Ara anotem la contrapart del costat del client:

Al costat del client:

import socket import pickle a = 10 s = socket.socket (socket.AF_INET, socket.SOCK_STREAM) s.connect ((socket.gethostname (), 2133)) while True: complete_info = b 'rec_msg = True mentre True: mymsg = s.recv (10) if rec_msg: print (f'La longitud del missatge = {mymsg [: a]} ') x = int (mymsg [: a]) rec_msg = Fals complete_info + = mymsg if len (complete_info) -a == x: print ('Ha rebut la informació completa') print (complete_info [a:]) m = pickle.loads (complete_info [a:]) print (m) rec_msg = True complete_info = b '' print (complete_info )

El primer bucle while ens ajudarà a fer un seguiment del missatge complet (complete_info) i del missatge que s’està rebent (rec_msg) mitjançant la memòria intermèdia. el missatge configurant rec_
Després, mentre es rep el missatge, tot el que estic fent és imprimir-ne cada bit, rebent-lo en una memòria intermèdia de mida 10. Aquesta mida pot variar en funció de la vostra elecció personal.

Aleshores, si el missatge rebut és igual al missatge complet, només imprimeixo el missatge com a informació completa rebuda després de la qual he des serialitzat el missatge mitjançant càrregues ().

La sortida al programa anterior és la següent:

Això ens porta al final d’aquest article sobre la programació de sòcol a Python. Espero que hagueu entès tots els conceptes amb claredat.

Assegureu-vos de practicar el màxim possible i de recuperar la vostra experiència.

Tens alguna pregunta? Si us plau, mencioneu-lo a la secció de comentaris d’aquest bloc “Socket Programming in Python” i us respondrem el més aviat possible.

Per obtenir coneixements en profunditat sobre Python juntament amb les seves diverses aplicacions, podeu inscriure-us a la publicació amb assistència les 24 hores del dia, els 7 dies de la setmana i accés permanent