¿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