Latest web development tutorials

Programación de la cadena de Python

Python ofrece dos niveles de servicios de red de acceso. :

  • servicios de red de bajo nivel para apoyar el zócalo de base, que proporciona una API estándar BSD sockets, puede acceder a todos los métodos de la interfaz de socket sistema operativo subyacente.
  • Un alto nivel de módulo de servicio de red SocketServer, proporciona una clase de servidor central, se puede simplificar el desarrollo del servidor de red.

¿Cuál es zócalo?

Socket también conocido como "toma", la aplicación se emite generalmente por una "toma" a la petición de solicitud de red o red de respuesta, por lo que el proceso entre hosts, o entre un equipo en el se puede comunicar.


función de socket ()

Python, utilizamos la función socket () para crear un socket, la sintaxis es la siguiente:

socket.socket([family[, type[, proto]]])

parámetros

  • familia: la familia puede hacer una toma de corriente o AF_INET AF_UNIX
  • Tipo: Tipo del zócalo puede ser orientado a la conexión o sin conexión en SOCK_STREAM o SOCK_DGRAM
  • Protocolo: Por lo general no se llene por defecto es cero.

objeto Socket método (built-in)

función descripción
socket del servidor
s.bind () Dirección bind (host, puerto) en el enchufe de AF_INET, en forma de una tupla (host, puerto) indica la dirección.
s.listen () Comienza TCP escuchar. retraso especificado antes de rechazar la conexión, el sistema operativo puede suspender el número máximo de conexiones. Este valor es al menos 1, la mayoría de las aplicaciones se pueden configurar para 5.
s.accept () La aceptación pasiva de las conexiones de cliente TCP (bloqueo) a la espera de la llegada de
El socket de cliente
s.connect () Activo inicializar las conexiones del servidor TCP. Dirección del formato de tuplas (nombre de host, puerto), si el error de conexión, se devuelve un error socket.error.
s.connect_ex () connect () versión ampliada de la función devuelve un código de error cuando un error en lugar de lanzar una excepción
funciones de socket fines públicos
s.recv () Recibir datos TCP, los datos se devuelven como una cadena, especifique la cantidad máxima de datos para ser recibido bufsize. Proporcionar información adicional sobre la bandera de mensajes usualmente puede ser ignorada.
s.send () Enviar datos TCP, envía la cadena de datos de la conexión de socket. El valor de retorno es el número de bytes para enviar, este número puede ser menor que la cadena de bytes.
s.sendall () Completas de datos TCP emisor, datos completos de transmisión TCP. Se envía la cadena de datos de la conexión de socket, pero antes de volver a tratar de enviar todos los datos. Ninguno retorno exitoso, se lanza una excepción fracaso.
s.recvform () Recibir datos UDP () es similar a la de recv, pero el valor de retorno es (datos, dirección). En donde los datos es una cadena que contiene los datos recibidos, los datos de dirección se envía dirección de socket.
s.sendto () Enviar datos UDP, enviar datos a una toma de corriente, dirección está en la forma de (ipaddr, puerto) tupla especificada dirección remota. El valor de retorno es el número de bytes enviados.
s.close () Cierre el zócalo
s.getpeername () Devuelve la dirección remota toma de conexión. El valor de retorno es por lo general una tupla (ipaddr, puerto).
s.getsockname () Devuelve propia dirección del zócalo. Por lo general, una tupla (ipaddr, puerto)
s.setsockopt (nivel, optname, valor) Establecer el valor de una opción de socket dado.
s.getsockopt (nivel, optname [.buflen]) El valor de retorno de la opción de socket.
s.settimeout (tiempo de espera) Conjunto periodo de tiempo de espera operación de socket, el tiempo de espera es un número de coma flotante, en cuestión de segundos. Nada indica que no hay valor de tiempo de espera. En general, el período de tiempo de espera sólo debe crear un juego de tubos, ya que pueden ser utilizados para operar la conexión (como connect ())
s.gettimeout () Devuelve el valor del tiempo de espera actual, en segundos, si no hay un conjunto periodo de tiempo de espera, se devuelve None.
s.fileno () Devuelve un descriptor de archivo de socket.
s.setblocking (bandera) Si la bandera es 0, el conector está configurado en el modo no-bloqueo, de lo contrario el socket a modo de bloqueo (el valor predeterminado). modo de no bloqueo, si se llama a recv () no se encontraron datos, o enviar la llamada () no puede enviar inmediatamente los datos, que causaría socket.error excepción.
s.makefile () Crear una documentos pertinentes en relación con el zócalo

ejemplo sencillo

el servidor

Utilizamos la funciónzócalo del módulo de tubo para crear un objeto socket.objeto socket puede llamar a otras funciones para establecer un servicio de zócalo.

Ahora podemos especificar los servicios llamando a la funciónde enlacede puerto(nombre de host, puerto)(puerto).

A continuación, llamamos al método de aceptarobjetos de socket. El método espera a que la conexión del cliente y volver objeto deconexiónque representa conectado al cliente.

El código completo es el siguiente:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:server.py

import socket               # 导入 socket 模块

s = socket.socket()         # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345                # 设置端口
s.bind((host, port))        # 绑定端口

s.listen(5)                 # 等待客户端连接
while True:
    c, addr = s.accept()     # 建立客户端连接。
    print '连接地址:', addr
    c.send('欢迎访问本教程!')
    c.close()                # 关闭连接

cliente

A continuación escribimos un cliente sencillo de conectar a las instancias de servicio creadas anteriormente. número de puerto es 12345.

Socket.connect (hosname, puerto), se abre una conexión TCP con el host para el puertonombre de hosta proveedores de servicios portuarios.Una vez conectado, podemos publicar-datos del servidor, recuerde, después de la finalización de la operación tiene que cerrar la conexión.

El código completo es el siguiente:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 文件名:client.py

import socket               # 导入 socket 模块

s = socket.socket()         # 创建 socket 对象
host = socket.gethostname() # 获取本地主机名
port = 12345                # 设置端口好

s.connect((host, port))
print s.recv(1024)
s.close()  

Ahora incluso tenemos que abrir el terminal, el primer terminal realiza server.py archivo:

$ python server.py

El segundo terminal realiza client.py archivo:

$ python client.py 
欢迎访问本教程!

Esta es nuestra primera y abra un terminal, verá la siguiente información de salida es:

连接地址: ('192.168.0.118', 62461)

módulos de Internet Python

Éstos son algunos de programación Python red importante módulo:

acuerdo función útil Número de puerto Los módulos de Python
HTTP acceso web 80 httplib, urllib, xmlrpclib
NNTP Leer y publicar artículos de noticias, conocido como el "post" 119 nntplib
FTP Transferencia de archivos 20 ftplib, urllib
SMTP Enviar e-mail 25 smtplib
POP3 recibir correo 110 poplib
IMAP4 Obtener correo 143 imaplib
Telnet Línea de comandos 23 telnetlib
ardilla de tierra encontrar información 70 gopherlib, urllib

Más detalles se pueden encontrar en el sitio web oficial de la Biblioteca de Python el zócalo y los módulos .