Python - Programación de redes
Página anteriorPágina siguiente
Python proporciona dos niveles de acceso a los servicios de red. En un nivel bajo, puede acceder al soporte de socket básico en el sistema operativo subyacente, lo que le permite implementar clientes y servidores para protocolos orientados a la conexión y sin conexión.
Python también tiene bibliotecas que brindan acceso de nivel superior a protocolos de red de nivel de aplicación específicos, como FTP, HTTP, etc.
Este capítulo le brinda comprensión sobre el concepto más famoso en redes:programación de sockets.
¿Qué son los enchufes?
Los sockets son los puntos finales de un canal de comunicaciones bidireccional. Los sockets pueden comunicarse dentro de un proceso, entre procesos en la misma máquina o entre procesos en diferentes continentes.
Los sockets se pueden implementar en varios tipos de canales diferentes:sockets de dominio Unix, TCP, UDP, etc. El enchufe biblioteca proporciona clases específicas para manejar los transportes comunes, así como una interfaz genérica para manejar el resto.
Los sockets tienen su propio vocabulario −
Sr.No. | Término y descripción |
---|---|
1 | Dominio La familia de protocolos que se utiliza como mecanismo de transporte. Estos valores son constantes como AF_INET, PF_INET, PF_UNIX, PF_X25, etc. |
2 | tipo El tipo de comunicaciones entre los dos extremos, normalmente SOCK_STREAM para protocolos orientados a conexión y SOCK_DGRAM para protocolos sin conexión. |
3 | protocolo Normalmente cero, esto se puede usar para identificar una variante de un protocolo dentro de un dominio y tipo. |
4 | nombre de host El identificador de una interfaz de red −
|
5 | puerto Cada servidor escucha a los clientes que llaman en uno o más puertos. Un puerto puede ser un número de puerto Fixnum, una cadena que contiene un número de puerto o el nombre de un servicio. |
El enchufe Módulo
Para crear un socket, debe usar socket.socket() función disponible en socket módulo, que tiene la sintaxis general −
s = socket.socket (socket_family, socket_type, protocol=0)
Aquí está la descripción de los parámetros −
-
familia_de_zócalos − Esto es AF_UNIX o AF_INET, como se explicó anteriormente.
-
tipo_de_socket − Esto es SOCK_STREAM o SOCK_DGRAM.
-
protocolo − Esto generalmente se omite, por defecto es 0.
Una vez que tenga socket objeto, entonces puede usar las funciones requeridas para crear su programa cliente o servidor. La siguiente es la lista de funciones requeridas −
Métodos de socket de servidor
Sr.No. | Método y descripción |
---|---|
1 | s.bind() Este método vincula la dirección (nombre de host, par de números de puerto) al socket. |
2 | s.listen() Este método configura e inicia la escucha TCP. |
3 | s.accept() Esto acepta pasivamente la conexión del cliente TCP, esperando hasta que llegue la conexión (bloqueo). |
Métodos de socket del cliente
Sr.No. | Método y descripción |
---|---|
1 | s.conectar() Este método inicia activamente la conexión con el servidor TCP. |
Métodos generales de socket
Sr.No. | Método y descripción |
---|---|
1 | s.recv() Este método recibe un mensaje TCP |
2 | s.send() Este método transmite el mensaje TCP |
3 | s.recvfrom() Este método recibe un mensaje UDP |
4 | s.sendto() Este método transmite un mensaje UDP |
5 | s.cerrar() Este método cierra el socket |
6 | socket.gethostname() Devuelve el nombre de host. |
Un servidor sencillo
Para escribir servidores de Internet, usamos el socket función disponible en el módulo de socket para crear un objeto de socket. A continuación, se utiliza un objeto de socket para llamar a otras funciones para configurar un servidor de socket.
Ahora llama a bind(hostname, port) función para especificar un puerto para su servicio en el host dado.
A continuación, llame al aceptar método del objeto devuelto. Este método espera hasta que un cliente se conecta al puerto que especificó y luego devuelve una conexión objeto que representa la conexión a ese cliente.
#!/usr/bin/python # This is server.py file import socket # Import socket module s = socket.socket() # Create a socket object host = socket.gethostname() # Get local machine name port = 12345 # Reserve a port for your service. s.bind((host, port)) # Bind to the port s.listen(5) # Now wait for client connection. while True: c, addr = s.accept() # Establish connection with client. print 'Got connection from', addr c.send('Thank you for connecting') c.close() # Close the connection
Un cliente sencillo
Escribamos un programa cliente muy simple que abra una conexión a un puerto 12345 dado y un host dado. Esto es muy simple para crear un cliente de socket usando el socket de Python función del módulo.
El socket.connect(nombrehos, puerto) abre una conexión TCP a hostname en el puerto . Una vez que tiene un socket abierto, puede leerlo como cualquier objeto IO. Cuando termine, recuerde cerrarlo, como cerraría un archivo.
El siguiente código es un cliente muy simple que se conecta a un host y puerto determinados, lee los datos disponibles del socket y luego sale −
#!/usr/bin/python # This is client.py file import socket # Import socket module s = socket.socket() # Create a socket object host = socket.gethostname() # Get local machine name port = 12345 # Reserve a port for your service. s.connect((host, port)) print s.recv(1024) s.close() # Close the socket when done
Ahora ejecute este server.py en segundo plano y luego ejecute encima de client.py para ver el resultado.
# Following would start a server in background. $ python server.py & # Once server is started run client as follows: $ python client.py
Esto produciría el siguiente resultado −
Got connection from ('127.0.0.1', 48437) Thank you for connecting
Módulos de Internet de Python
Una lista de algunos módulos importantes en la programación de Python Network/Internet.
Protocolo | Función común | Número de puerto | Módulo Python |
---|---|---|---|
HTTP | Páginas web | 80 | httplib, urllib, xmlrpclib |
NNTP | Noticias de Usenet | 119 | nntplib |
FTP | Transferencias de archivos | 20 | ftplib, urllib |
SMTP | Enviando correo electrónico | 25 | smtplib |
POP3 | Obteniendo correo electrónico | 110 | poplib |
IMAP4 | Obteniendo correo electrónico | 143 | imaplib |
Telnet | Líneas de comando | 23 | telnetlib |
Gopher | Transferencias de documentos | 70 | gopherlib, urllib |
Compruebe todas las bibliotecas mencionadas anteriormente para trabajar con los protocolos FTP, SMTP, POP e IMAP.
Lecturas adicionales
Este fue un comienzo rápido con la programación de sockets. Es un tema amplio. Se recomienda pasar por el siguiente enlace para encontrar más detalles −
-
Programación de sockets Unix.
-
Módulos y biblioteca de sockets de Python.
python