Para una comunicación se tienen dos términes que debemos entender el cuál es servicio y protocolo, el segundo ya definido y el primero definido a continuación:
Servicio:
Es el conjunto de operaciones que una capa proporciona a la capa que esta encima de ellos. En esta se define que operaciones puede realizar la cara en beneficios de sus usuarios
UPD
El protocolo UDP es un protocolo no orientado a conexión, conocido también como datagrama que es un servicio sin conexión no confiable, ya que no se tiene una obligación de confirmar la recepción, por que no es obligatorio poner en la estructura del protocolo el origen del paquete.
El udp es implementado en la aplicación de SPAM, mensajería de texto y consultas en Base de Datos.
En ésta entrada, se realizo un pequeño programa que es adivinar un número, donde se muestra la implementación de UDP con el envió de paquetes, en sí el programa es muy sencillo ya que lo que hace es establecer una conexión entre cliente y servidor y el cliente dice un número entre 1 y 5 para mandarlo al servidor, el servidor ve el tamaño del paquete en lo descomprime y verifica si el número es adivinado, si es asi sube la puntuación.
Código Servidor:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import socket | |
import struct | |
import random | |
UDP_IP = "127.0.0.1" | |
UDP_PORT = 5008 | |
sock = socket.socket( socket.AF_INET, socket.SOCK_DGRAM ) | |
sock.bind( (UDP_IP,UDP_PORT) ) | |
suma = 0 | |
while True: | |
data, addr = sock.recvfrom( 1024 ) # buffer size is 1024 bytes | |
print data | |
valor = random.randrange(1,5) | |
data = struct.unpack("i",data) | |
print 'El tamanio del paquete es: '+str(len(data))+' byte(s)' | |
if(data == valor): | |
suma += 1 | |
print 'Adivinaste' | |
else: | |
print 'No fue el numero' | |
print 'Tu puntuacion es: '+str(suma)+'\n' | |
print addr[0] | |
suma = str(suma) | |
sock.sendto(suma, (addr[0], UDP_PORT)) |
Código Cliente:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from sys import argv | |
import socket | |
import struct | |
UDP_IP = "127.0.0.1" | |
UDP_PORT = 5008 | |
sock = socket.socket( socket.AF_INET, # Internet | |
socket.SOCK_DGRAM ) # UDP | |
while True: | |
print 'Ingresa un numero entre 1 y 5: ' | |
valor = raw_input() | |
valor = struct.pack("i",int(valor)) | |
sock.sendto(valor, (UDP_IP, UDP_PORT)) | |
data = sock.recvfrom( 1024 ) # buffer size is 1024 bytes | |
if(data != ''): | |
print data | |
A continuación se muestra una imagen con los resultados obtenido entre la comunicación de ambos:
Referencia:
http://codeprogress.com/python/libraries/standard%20python/showPythonExample.php?index=9&key=SendReceiveBinaryDataUDP#.URbwPlrm63q
http://mundogeek.net/archivos/2008/04/12/sockets-en-python/
Es muy simple el programa y no muy impresionante la entrada... El protocolo en sí no hace nada interesante y yo esperaba multicliente. Van 6 pts.
ResponderEliminar