Enchufes | Python

¿Qué es el zócalo?  
Los sockets actúan como un canal de comunicación bidireccional donde son puntos finales del mismo. Los sockets pueden comunicarse dentro del proceso, entre diferentes procesos y también procesos en diferentes lugares.
Módulo de socket : s.socket.socket (socket_family, socket_type, protocol=0)
 

  • socket_family- AF_UNIX o AF_INET
  • socket_type- SOCK_STREAM o SOCK_DGRAM
  • protocol- omitido, ot por defecto a 0

Una vez que se crea el objeto de socket como se mencionó anteriormente, ahora podemos usar las funciones a continuación para crear programas de servidor de cliente. 
Métodos de zócalo 
 

No Señor. Método y descripción

Métodos de socket del servidor

1.

s.bind : este método vincula la dirección del nombre de host, el número de puerto al socket

 
 

2.

s.listen : este método configura e inicia la escucha TCP

 
 

3.

s.accept : acepta pasivamente la conexión del cliente, esperando hasta que la conexión llegue bloqueando

 
 

Métodos de socket de cliente

1.

s.connect : este método inicia activamente la conexión del servidor TCP

 
 

Métodos generales de socket 
 

No Señor. Método y descripción
1.

s.recv : este método recibe un mensaje TCP

 
 

2.

s.send : este método transmite un mensaje TCP

 
 

3.

s.recvfrom : este método recibe un mensaje UDP

 
 

4.

s.sendto : este método transmite un mensaje UDP

 
 

5.

s.close : este método cierra el socket

 
 

6.

s.gethostname : devuelve un nombre de host

 
 

Ejemplos: fecha de envío del servidor al cliente 
 

client side
Output :today's Date

Python3

# importing required modules
import socket    
import datetime
 
# initializing socket
s = socket.socket()    
host = socket.gethostname() 
port = 12345
 
# binding port and host
s.bind((host, port))  
 
# waiting for a client to connect
s.listen(5) 
        
while True:
   # accept connection
   c, addr = s.accept()       
   print ('got connection from addr', addr)
   date = datetime.datetime.now() 
   d = str(date)
 
   # sending data type should be string and encode before sending
   c.send(d.encode())     
   c.close()

Python3

import socket
s = socket.socket()
host = socket.gethostname()
port = 12345
 
# connect to host
s.connect((host, port))
 
# recv message and decode here 1024 is buffer size.   
print (s.recv(1024).decode())  
s.close()

Nota: Cree 2 instancias del compilador de python para ejecutar el código del cliente y del servidor por separado, no las ejecute en la misma instancia.
Salida:
lado del servidor- 
 

Lado del cliente:
aquí aparece la fecha y hora actual que se obtiene del servidor 
 

Zócalos UDP

UDP es PROTOCOLO DE DATOS DE USUARIO , este es un protocolo liviano que tiene un mecanismo básico de verificación de errores sin reconocimiento ni secuenciación, pero muy rápido debido a estas razones
Ejemplos: fecha de envío del servidor al cliente 
 

client side
Input : vivek  
Input : 17BIT0382  
Output : password match 

Python3

import socket
 
localIP = "127.0.0.1"
localPort = 20001
bufferSize = 1024
 
UDPServerSocket = socket.socket(family = socket.AF_INET, type = socket.SOCK_DGRAM)
UDPServerSocket.bind((localIP, localPort))
print("UDP server up and listening")
 
# this might be database or a file
di ={'17BIT0382':'vivek', '17BEC0647':'shikhar', '17BEC0150':'tanveer',
'17BCE2119':'sahil', '17BIT0123':'sidhant'}
 
while(True):
   # receiving name from client
   name, addr1 = UDPServerSocket.recvfrom(bufferSize) 
 
   # receiving pwd from client
   pwd, addr1 = UDPServerSocket.recvfrom(bufferSize) 
 
   name = name.decode() 
   pwd = pwd.decode()
   msg =''
   if name not in di:
       msg ='name does not exists'
       flag = 0
   for i in di:
      if i == name:
          if di[i]== pwd:
              msg ="pwd match"
              flag = 1
          else:
              msg ="pwd wrong"
      bytesToSend = str.encode(msg)
      # sending encoded status of name and pwd
      UDPServerSocket.sendto(bytesToSend, addr1) 

Python3

import socket
 
# user input
name = input('enter your username : ')    
bytesToSend1 = str.encode(name)
password = input('enter your password : ')
bytesToSend2 = str.encode(password)
 
serverAddrPort = ("127.0.0.1", 20001)
bufferSize = 1024
 
# connecting to hosts
UDPClientSocket = socket.socket(family = socket.AF_INET, type = socket.SOCK_DGRAM) 
 
# sending username by encoding it
UDPClientSocket.sendto(bytesToSend1, serverAddrPort) 
# sending password by encoding it
UDPClientSocket.sendto(bytesToSend2, serverAddrPort) 
 
# receiving status from server
msgFromServer = UDPClientSocket.recvfrom(bufferSize) 
msg = "Message from Server {}".format(msgFromServer[0].decode()) 
print(msg)

Para simplificar el código, he elegido un diccionario que puede usar una base de datos, un archivo o un archivo CSV, etc. para otros fines. 
Producción: 
 

Publicación traducida automáticamente

Artículo escrito por VivekShetty 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 *