Programación de sockets en Python

La programación de sockets es una forma de conectar dos Nodes en una red para comunicarse entre sí. Un socket (Node) escucha en un puerto particular en una IP, mientras que el otro socket se comunica con el otro para formar una conexión. El servidor forma el socket de escucha mientras el cliente se comunica con el servidor. 
Son la columna vertebral real detrás de la navegación web. En términos más simples, hay un servidor y un cliente. 
La programación de sockets se inicia importando la biblioteca de sockets y creando un socket simple. 

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

Aquí creamos una instancia de socket y le pasamos dos parámetros. El primer parámetro es AF_INET y el segundo es SOCK_STREAM . AF_INET se refiere a la familia de direcciones ipv4. El SOCK_STREAM significa protocolo TCP orientado a la conexión. 
Ahora podemos conectarnos a un servidor usando este socket.3

Conexión a un servidor: 

Tenga en cuenta que si se produce algún error durante la creación de un socket, entonces un socket. se lanza un error y solo podemos conectarnos a un servidor conociendo su IP. Puede encontrar la IP del servidor usando esto: 

$ ping www.google.com

También puede encontrar la IP usando python: 

import socket 

ip = socket.gethostbyname('www.google.com')
print ip

Aquí hay un ejemplo de un script para conectarse a Google.

Python3

# An example script to connect to Google using socket
# programming in Python
import socket # for socket
import sys
 
try:
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    print ("Socket successfully created")
except socket.error as err:
    print ("socket creation failed with error %s" %(err))
 
# default port for socket
port = 80
 
try:
    host_ip = socket.gethostbyname('www.google.com')
except socket.gaierror:
 
    # this means could not resolve the host
    print ("there was an error resolving the host")
    sys.exit()
 
# connecting to the server
s.connect((host_ip, port))
 
print ("the socket has successfully connected to google")

Producción : 

Socket successfully created
the socket has successfully connected to google 
on port == 173.194.40.19
  • En primer lugar, hicimos un zócalo.
  • Luego resolvimos la IP de Google y, por último, nos conectamos a Google.
  • Ahora necesitamos saber cómo podemos enviar algunos datos a través de un socket.
  • Para enviar datos, la biblioteca de sockets tiene una función sendall . Esta función le permite enviar datos a un servidor al que está conectado el socket y el servidor también puede enviar datos al cliente utilizando esta función.

Un simple programa servidor-cliente: 
 

servidor: 

Un servidor tiene un método bind() que lo vincula a una IP y puerto específicos para que pueda escuchar las requests entrantes en esa IP y puerto. Un servidor tiene un método listen() que pone al servidor en modo de escucha. Esto permite que el servidor escuche las conexiones entrantes. Y por último, un servidor tiene un método accept() y close(). El método accept inicia una conexión con el cliente y el método close cierra la conexión con el cliente. 

Python3

# first of all import the socket library
import socket            
 
# next create a socket object
s = socket.socket()        
print ("Socket successfully created")
 
# reserve a port on your computer in our
# case it is 12345 but it can be anything
port = 12345               
 
# Next bind to the port
# we have not typed any ip in the ip field
# instead we have inputted an empty string
# this makes the server listen to requests
# coming from other computers on the network
s.bind(('', port))        
print ("socket binded to %s" %(port))
 
# put the socket into listening mode
s.listen(5)    
print ("socket is listening")           
 
# a forever loop until we interrupt it or
# an error occurs
while True:
 
# Establish connection with client.
  c, addr = s.accept()    
  print ('Got connection from', addr )
 
  # send a thank you message to the client. encoding to send byte type.
  c.send('Thank you for connecting'.encode())
 
  # Close the connection with the client
  c.close()
   
  # Breaking once connection closed
  break
  • En primer lugar, importamos el socket que es necesario.
  • Luego hicimos un objeto socket y reservamos un puerto en nuestra pc.
  • Después de eso, vinculamos nuestro servidor al puerto especificado. Pasar una string vacía significa que el servidor también puede escuchar las conexiones entrantes de otras computadoras. Si hubiéramos pasado 127.0.0.1, habría escuchado solo aquellas llamadas realizadas dentro de la computadora local.
  • Después de eso, ponemos el servidor en modo de escucha.5 aquí significa que 5 conexiones se mantienen en espera si el servidor está ocupado y si un sexto socket intenta conectarse, la conexión es rechazada.
  • Por último, hacemos un ciclo while y comenzamos a aceptar todas las conexiones entrantes y cerramos esas conexiones después de un mensaje de agradecimiento a todos los enchufes conectados.

Cliente: 
ahora necesitamos algo con lo que un servidor pueda interactuar. Podríamos acceder al servidor de esta manera solo para saber que nuestro servidor está funcionando. Escribe estos comandos en la terminal: 

# start the server
$ python server.py

# keep the above terminal open 
# now open another terminal and type: 
 
$ telnet localhost 12345

Si no se reconoce ‘telnet’. En Windows, busque las funciones de Windows y active la función «cliente telnet».

Producción : 

# in the server.py terminal you will see
# this output:
Socket successfully created
socket binded to 12345
socket is listening
Got connection from ('127.0.0.1', 52617)
# In the telnet terminal you will get this:
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Thank you for connectingConnection closed by foreign host.

Este resultado muestra que nuestro servidor está funcionando.
Ahora para el lado del cliente: 

Python3

# Import socket module
import socket            
 
# Create a socket object
s = socket.socket()        
 
# Define the port on which you want to connect
port = 12345               
 
# connect to the server on local computer
s.connect(('127.0.0.1', port))
 
# receive data from the server and decoding to get the string.
print (s.recv(1024).decode())
# close the connection
s.close()    
     
  • En primer lugar, creamos un objeto socket.
  • Luego nos conectamos a localhost en el puerto 12345 (el puerto en el que se ejecuta nuestro servidor) y, por último, recibimos datos del servidor y cerramos la conexión.
  • Ahora guarde este archivo como client.py y ejecútelo desde la terminal después de iniciar el script del servidor.
# start the server:
$ python server.py
Socket successfully created
socket binded to 12345
socket is listening
Got connection from ('127.0.0.1', 52617)
# start the client:
$ python client.py
Thank you for connecting

Referencia: Programación de Python Socket
Este artículo es una contribución de Kishlay Verma . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *