Download socket - ArgentinaIRC

Document related concepts
no text concepts found
Transcript
Sockets en Python
Bautista Neri Alejandro
Corona Falcon Juan
Gonzalez Castillo Ignacio
Quiroz Martinez Ezequiel
Python alcanzó la versión 1.0 en enero de 1994. Una característica de este
lanzamiento fueron las herramientas de la programación funcional: lambda, map,
filter y reduce.
La última versión liberada fue Python 1.2. En 1995
Durante su estancia en CNRI, van Rossum lanzó la iniciativa Computer
Programming for Everybody, con el fin de hacer la programación más accesible,
con un nivel de 'alfabetización' básico en lenguajes de programación, similar a la
alfabetización básica en inglés y habilidades matemáticas indispensables para los
trabajadores.
Python tuvo un papel crucial en este proceso: debido a su orientación hacia una
sintaxis limpia, presentaban similitudes con su predecesor, ABC.
Python 2.0 tomó una característica del lenguaje de programación Haskell: list
comprehensions. Python tiene una sintaxis muy similar a la de Haskell, salvo por la
preferencia de los caracteres de puntuación en Haskell.
Python 2.0 introdujo además un sistema de recolección de basura capaz de
recolectar referencias cíclicas.
Python License, incluía una cláusula estipulando que estaba gobernada por el
estado de Virginia, bajo la óptica de los abogados de Free Software Foundation
(FSF), se hacía incompatible con GNU GPL. CNRI y FSF se relacionaron para
cambiarla a software libre de Python y hacerla compatible con GPL.
En Python 2.2 fue la unificación de los tipos en Python (tipos escritos en C), y
clases (tipos escritos en Python) dentro de una jerarquía. Esa unificación logró un
modelo de objetos de Python puro y consistente. También se agregaron
generadores para el lenguaje Icon.
Las adiciones a la biblioteca estándar de Python y las decisiones sintácticas
fueron influenciadas fuertemente por Java en algunos casos: el package logging,
en la versión 2.3, el parser SAX, en 2.0, y la sintaxis del patrón decorator que usa
el @, agregado en la versión 2.4.
Características
Se compara habitualmente con Tcl, Perl, Scheme, Java y Ruby. En la actualidad
Python se desarrolla como un proyecto de código abierto, administrado por la
Python Software Foundation. La última versión estable del lenguaje es 3.1.
Python permite dividir el programa en módulos reutilizables desde otros
programas Python. Viene con una gran colección de módulos estándar que se
pueden utilizar como base a los programas. También hay módulos incluidos que
proporcionan E/S de ficheros, llamadas al sistema, sockets y hasta interfaces a
GUI (interfaz gráfica con el usuario) como Tk, GTK, Qt entre otros.
Python se utiliza como lenguaje de programación interpretado, ahorrando un
tiempo considerable en el desarrollo del programa, no es necesario compilar ni
enlazar. El intérprete se puede utilizar de modo interactivo, lo que facilita
experimentar las características del lenguaje.
Otro objetivo del diseño del lenguaje es la facilidad de extensión. Nuevos módulos
se pueden escribir fácilmente en C o C++. Python puede utilizarse como un
lenguaje de extensión para módulos y aplicaciones que necesitan de una interfaz
programable.
Los sockets son las tuberías de plomo de las redes
computacionales que le permiten conectarse con otros
dispositivos para que la información fluya libremente.
Como es de esperar, son ampliamente utilizados en
Internet.
Los programas utilizan sockets para comunicarse con
otros programas, que pueden estar situados en
computadoras distintas.
Un socket queda definido por la dirección IP de la
máquina, el puerto en el que escucha, y el protocolo
que utiliza.
Los sockets se clasifican en sockets de flujo
(socket.SOCK_STREAM)
Los sockets de datagramas (socket.SOCK_DGRAM)
Dependiendo de si el servicio utiliza TCP, que es
orientado a conexión y fiable, o UDP, respectivamente.
a) El dominio de UNIX. (AF_UNIX)
b) El dominio de internet. (AF_INET)
c) El dominio NS.
El dominio de internet. (AF_INET)
Se utiliza para la comunicación entre procesos del
sistema.
 Se utiliza en procesos que se están comunicando a
través de TCP(UDP)/IP.
Se utilizaba sobre los procesos que se comunicaban
sobre el protocolo de comunicación de Xerox.
Python solo soporta los dos primeros tipos de
comunicación.
Socket
Descripcion
socket
Crea un socket del tipo y familia
especificada.
socket.accept
Acepta nuevas conexiones.
socket.connect
Conecta el socket a la dirección dada en el
puerto dado.
socket.send
Envia datos al socket especificado.
socket.recv
Recive información.
Lo primero que se hace es crear un objeto socket para el servidor
#constructor socket.socket()
#e indicamos el puerto de escucha utilizando método bind
socket_s=socket.socket( )
socket_s.bind((“Local host”, 9999))
Por último utilizamos listen para hacer que el socket acepte
conexiones entrantes y accept para comenzar a escuchar.
El método accept se mantiene a la espera de
conexiones entrantes, bloqueando la ejecución hasta
que llega un mensaje.
#el argumento de listen es el numero de clientes
socket_s.listen(10)
Cuando llega un mensaje, accept desbloquea la
ejecución, devolviendo un objeto socket que
representa la conexión del cliente y una tupla que
contiene el host y puerto de dicha conexión.
#representa a la conexión
socket_c, (host_c, puerto_c)=socket_s.accept( )
Una vez que tenemos este objeto socket podemos
comunicarnos con el cliente a través suyo, mediante los
métodos recv y send (o recvfrom y sendfrom en UDP)
que permiten recibir o enviar mensajes
respectivamente.
#send(datos) recv (bytes)
recibido=socket_c.recv(1024)
print “Recibido: ”, recibio
socket_c.send(recibido)
#posterirmente se cierra
Crear un cliente es aún más sencillo. Sólo tenemos que
crear el objeto socket, utilizar el método connect para
conectarnos al servidor y utilizar los métodos send y
recv. El argumento de connect es una tupla con host y
puerto, exactamente igual que bind.
socket_c=socket.socket( )
socket_c.connect((“localhost”, 9999))
socket_c.send(“hola”)
#El cliente manda al servidor cualquier mensaje que escriba el usuario y
#el servidor no hace más que repetir el mensaje recibido. La ejecución
#termina cuando el usuario escribe quit
#en el lado del servidor
import socket
s=socket.socket()
s.bind((“Localhost”, 9999))
s.listen(1)
sc, addr=s.accept( )
while True:
recibido=sc.recv(1024)
if recibido==”quit”
break
print “Recibido: ”, recibido
sc.send(recibido)
print “adios”
sc.close()
s.close()
#en el lado del cliente
import socket
c=socket.socket
c.connect((“Localhost”, 9999))
Conclusiones
 Su sintaxis simple, clara y sencilla.
 Interfaz dinámico.
 Gestor de memoria.
 Gran cantidad de librerías disponibles y la potencia del
lenguaje.
 Hacen que desarrollar una aplicación en Python sea
sencillo, muy rápido.
 La sintaxis es sencilla y cercana al lenguaje
natural
Conclusiones
 Algunos ejemplos en el uso de Python son:
 Google,
 Yahoo,
 NASA,
 Industrias Light & Magic,
 Distribuciones LINUX,
 No es adecuado para la programación de bajo nivel o para
aplicaciones en las que el rendimiento sea crítico.