Sie sind auf Seite 1von 7

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 bidireccional.Sockets
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 socket.socket () funcin disponible enzcalo
de mdulo, que tiene la sintaxis general -

s = socket.socket (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

s.bind () Este mtodo se une electrnico (nombre de host, el par nmero de


puerto) a la toma.

s.listen () Este mtodo establece y empezar oyente TCP.

s.accept () Este pasivamente aceptar conexin de cliente TCP, esperando a que


llegue la conexin (bloqueo).

Mtodos Socket Cliente


Procedimiento Descripcin

s.connect () Este mtodo inicia activamente conexin de servidor TCP.

Mtodos generales de Socket


Procedimiento Descripcin

s.recv () Este mtodo recibe el mensaje TCP

s.send () Este mtodo transmite el mensaje TCP

s.recvfrom () Este mtodo recibe el mensaje UDP

s.sendto () Este mtodo transmite mensaje UDP

s.close () Este mtodo cierra socket


socket.gethostname () 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)
serverSocket.bind(('', serverPort))
print ("The server is ready to receive")
while 1:
message, clientAddress = serverSocket.recvfrom(2048)
modifiedMessage = message.upper()
serverSocket.sendto(modifiedMessage, clientAddress)

CLIENTE UDP

import socket
import sys
serverName = 'localhost'
serverPort = 12000
client_socket = socket.socket(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 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# Bind the socket to the port
server_address = ('localhost', 10000)
print >>sys.stderr, 'starting up on %s port %s' % server_address
sock.bind(server_address)
# Listen for incoming connections
sock.listen(1)

while True:
# Wait for a connection
print >>sys.stderr, 'waiting for a connection'
connection, client_address = sock.accept()
try:
print >>sys.stderr, 'connection from', client_address

# Receive the data in small chunks and retransmit it


while True:
data = connection.recv(16)
print >>sys.stderr, 'received "%s"' % data
if data:
print >>sys.stderr, 'sending data back to the client'
connection.sendall(data)
else:
print >>sys.stderr, 'no more data from', client_address
break
finally:
# Clean up the connection
connection.close()

CLIENTE TCP

import socket
import sys

# Create a TCP/IP socket


sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# Connect the socket to the port where the server is listening


server_address = ('localhost', 10000)
print >>sys.stderr, 'connecting to %s port %s' % server_address
sock.connect(server_address)
try:

# Send data
message = raw_input('Escribe tu nombre')
print >>sys.stderr, 'sending "%s"' % message
sock.sendall(message)

# Look for the response


amount_received = 0
amount_expected = len(message)

while amount_received < amount_expected:


data = sock.recv(16)
amount_received += len(data)
print >>sys.stderr, 'received "%s"' % data

finally:
print >>sys.stderr, 'closing socket'
sock.close()

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

Das könnte Ihnen auch gefallen