TALLER DE SOCKETS EN PYTHON
Python proporciona dos niveles de acceso a los servicios de red. En un nivel bajo, se puede
acceder al soporte bsico socket en el sistema operativo subyacente, lo que le permite
implementar clientes y servidores para ambos protocolos orientados a conexin y sin
conexin.
Python tambin tiene bibliotecas que proporcionan acceso de nivel superior a los protocolos
de red de nivel de aplicacin especficos, tales como FTP, HTTP, y as sucesivamente.
En este captulo se da entender en el concepto ms famoso en Redes - Socket programacin.
Qu es un Sockets?
Los Sockets son los puntos finales de un canal de comunicacin [Link]
pueden comunicarse dentro de un proceso, entre los procesos en la misma mquina, o entre
procesos en diferentes continentes.
Se pueden implementar en un nmero de diferentes tipos de canales: sockets de dominio
Unix, TCP, UDP, y as sucesivamente. El socket biblioteca proporciona clases especficas
para el manejo de los medios de transporte comunes, as como una interfaz genrica para
manejar el resto.
Sockets tienen su propio vocabulario:
Trmino Descripcin
dominio La familia de protocolos que se utiliza como mecanismo de
transporte. Estos valores son constantes tales como AF_INET,
PF_INET, PF_UNIX, PF_X25, y as sucesivamente.
escribe El tipo de comunicaciones entre los dos puntos finales, normalmente
SOCK_STREAM para protocolos orientados a la conexin y
SOCK_DGRAM de protocolos sin conexin.
protocolo Tpicamente cero, esto puede ser utilizado para identificar una variante
de un protocolo dentro de un dominio y el tipo.
nombre de host El identificador de una interfaz de red:
Una cadena, que puede ser un nombre de host, una direccin
decimal con puntos, o una direccin IPv6 en dos puntos (y
posiblemente dot) notacin
Una cadena "<broadcast>", que especifica una direccin
INADDR_BROADCAST.
Una cadena de longitud cero, que especifica INADDR_ANY o
Un entero, interpretado como una direccin binaria en orden de
bytes de acogida.
Puerto Cada servidor escucha para los clientes piden a uno o ms puertos. Un
puerto puede ser un nmero Fixnum puerto, una cadena que contiene un
nmero de puerto o el nombre de un servicio.
El zcalo de mdulo
Para crear un socket, debe utilizar el [Link] () funcin disponible enzcalo
de mdulo, que tiene la sintaxis general -
s = [Link] (socket_family, socket_type, protocol=0)
Esta es la descripcin de los parmetros -
socket_family: Este es o bien AF_UNIX o AF_INET, como se explic
anteriormente.
socket_type: Esto es bien SOCK_STREAM o SOCK_DGRAM.
protocolo: Esto generalmente se queda fuera, por defecto a 0.
Una vez que tenga toma de objeto, entonces usted puede utilizar las funciones necesarias
para crear su cliente o programa servidor. A continuacin se presenta la lista de funciones es
necesario -
Mtodos Socket Server
Procedimiento Descripcin
[Link] () Este mtodo se une electrnico (nombre de host, el par nmero de
puerto) a la toma.
[Link] () Este mtodo establece y empezar oyente TCP.
[Link] () Este pasivamente aceptar conexin de cliente TCP, esperando a que
llegue la conexin (bloqueo).
Mtodos Socket Cliente
Procedimiento Descripcin
[Link] () Este mtodo inicia activamente conexin de servidor TCP.
Mtodos generales de Socket
Procedimiento Descripcin
[Link] () Este mtodo recibe el mensaje TCP
[Link] () Este mtodo transmite el mensaje TCP
[Link] () Este mtodo recibe el mensaje UDP
[Link] () Este mtodo transmite mensaje UDP
[Link] () Este mtodo cierra socket
[Link] () Devuelve el nombre de host.
A continuacin se implementarn dos servicios de la capa de transporte utilizando Sockets en
Pythons
SERVIDOR UDP
from socket import *
serverPort = 12000
serverSocket = socket(AF_INET, SOCK_DGRAM)
[Link](('', serverPort))
print ("The server is ready to receive")
while 1:
message, clientAddress = [Link](2048)
modifiedMessage = [Link]()
[Link](modifiedMessage, clientAddress)
CLIENTE UDP
import socket
import sys
serverName = 'localhost'
serverPort = 12000
client_socket = [Link](socket.AF_INET, socket.SOCK_DGRAM)
message = raw_input('Input lowercase sentence:')
client_socket.sendto(message,(serverName, serverPort))
modifiedMessage, serverAddress = client_socket.recvfrom(2048)
print (modifiedMessage)
client_socket.close()
ACTIVIDAD A DESARROLLAR
1. Modifique los cdigos anteriores y realice el siguiente ejercicio
- Dados 3 nmeros reales, decir que tipo de triangulo es (Equiltero, Escaleno o
Issceles). Los datos los pide el cliente y el servidor ejecuta el algoritmo que
determina qu tipo de triangulo corresponde y le devuelve la respuesta al cliente
UDP.
2. Utilice dos mquinas, una funcionar como servidor y la otra como cliente, en la
mquina cliente ejecute Wireshark y analice la trama UDP
SERVIDOR TCP
import socket
import sys
# Create a TCP/IP socket
sock = [Link](socket.AF_INET, socket.SOCK_STREAM)
# Bind the socket to the port
server_address = ('localhost', 10000)
print >>[Link], 'starting up on %s port %s' % server_address
[Link](server_address)
# Listen for incoming connections
[Link](1)
while True:
# Wait for a connection
print >>[Link], 'waiting for a connection'
connection, client_address = [Link]()
try:
print >>[Link], 'connection from', client_address
# Receive the data in small chunks and retransmit it
while True:
data = [Link](16)
print >>[Link], 'received "%s"' % data
if data:
print >>[Link], 'sending data back to the client'
[Link](data)
else:
print >>[Link], 'no more data from', client_address
break
finally:
# Clean up the connection
[Link]()
CLIENTE TCP
import socket
import sys
# Create a TCP/IP socket
sock = [Link](socket.AF_INET, socket.SOCK_STREAM)
# Connect the socket to the port where the server is listening
server_address = ('localhost', 10000)
print >>[Link], 'connecting to %s port %s' % server_address
[Link](server_address)
try:
# Send data
message = raw_input('Escribe tu nombre')
print >>[Link], 'sending "%s"' % message
[Link](message)
# Look for the response
amount_received = 0
amount_expected = len(message)
while amount_received < amount_expected:
data = [Link](16)
amount_received += len(data)
print >>[Link], 'received "%s"' % data
finally:
print >>[Link], 'closing socket'
[Link]()
ACTIVIDAD A DESARROLLAR
3. Modifique los cdigos anteriores y realice los siguientes ejercicios
a. Una agencia de apuestas desea disear un sistema que pueda hacer las siguientes
operaciones.
El sistema debe pedir el nmero a jugar (puede ser de 3 o 4 cifras), la lotera con
la que quiere hacer la apuesta y el valor de la apuesta. El sistema debe consultar
de acuerdo a la fecha actual que loteras estn activas para el da en que el cliente
hace la apuesta. Cuando el cliente digite el nmero, la lotera y el valor, el
sistema del cliente debe hacer una solicitud al servidor y verificar que la apuesta
no haya superado el tope. El tope de apuesta es definido desde el servidor. El
cliente al final del da podr consultar:
o Cul fue el nmero ms jugado de acuerdo a la lotera
o El monto total recaudado de acuerdo a todas las apuestas.
o El monto recaudado por loteras
o El nmero menos jugado.
b. La Registradura Nacional del Estado Civil de Colombia, lo ha contratado a usted
para que resuelva el siguiente problema.
Se desea desarrollar un sistema que permita capturar desde un cliente su
identificacin y este a su vez haga una solicitud a un servidor para que consulte si
es jurado de votacin, en el caso afirmativo debe decir la mesa en donde el
ciudadano debe asistir como jurado. De igual forma el sistema del lado del cliente
debe permitir consultar en qu lugar puede votar un ciudadano de acuerdo a su
cedula.
Para resolver este problema debe implementar una base de datos o en su defecto
unos archivos planos para hacer las consultas en el servidor.
c. El FOSYGA, desea que le implementen una aplicacin que permita de acuerdo a
su nmero de identificacin a que EPS pertenece y su nivel de SISBEN
Para resolver el problema debe implementar una base de datos o un sistema de
archivos del lado del servidor.
Para resolver este problema debe implementar una base de datos del lado del servidor junto
con las restricciones descritas en el problema.
4. Utilice dos mquinas, una funcionar como servidor y la otra como cliente, en la
mquina servidor ejecute Wireshark y analice las trama TCP