Skip to content

Instantly share code, notes, and snippets.

@pepgonzalez
Created February 12, 2013 04:46
Show Gist options
  • Save pepgonzalez/4760305 to your computer and use it in GitHub Desktop.
Save pepgonzalez/4760305 to your computer and use it in GitHub Desktop.
import socket as s
def servidor():
global c
socket = s.socket(s.AF_INET,s.SOCK_DGRAM)
socket.bind (("127.0.0.1",5005))
while True: # loop por mensaje recibido, llama a funcion parsear
data, addr = socket.recvfrom(1024) # lee info y host que envio msj
parsearMensaje(data,addr) #Parsear el mensaje
c += 1
def parsearMensaje(data,d): # Funcion para parsear
print "paquete recibido"
print "parseando mensaje"
global paquetes
global mensaje
global cpaq
numPaq = 0
msj = ''
if (len(data) == 16): # si es un paquete inicial
print "paquete inicial"
cpaq = obtenerNumeroDeBits(data[:8]) #obtiene la cantidad de paquetes
tpaq = obtenerNumeroDeBits(data[8:]) #obtiene el tam. de los paquetes
paquetes.append(cpaq) #guarda valores
paquetes.append(tpaq)
print "numero de paquetes: "+str(cpaq)
print "tam. de paquetes: "+str(tpaq)
else: # si es un paquete normal
numPaq = obtenerNumeroDeBits(data[:8]) # obtiene entero de num de paquete
msj = data[8:] # obtiene los datos
mensaje += msj # aqui se va armando la trama
print "numero de paquete: "+str(numPaq)
print "contenido del mensaje: "+str(msj)
m = ''
if (numPaq == cpaq): # si llego el ultimo paquete
print "Todos los paquetes recibidos"
print "Trama binaria:"
print mensaje
mensaje = procesaTrama(mensaje) # procesar la trama
print "Texto mensaje"
print mensaje # texto generado de la trama
guardarMensaje(mensaje) #replicar archivo
print "Fin del proceso"
def guardarMensaje(m): # guardar replica de archivo
f = open("replica.txt","w")
f.write(m)
f.close()
print "archivo guardado"
def procesaTrama(m): # procesar la trama de la transmision
lista = [] #lista
msj = '' #mensaje
for e in m: # hacer lista de caracteres de trama
lista.append(e)
while (len(lista) > 0): #mientras tenga caracteres a procesar
b = '' # limpiar msj
for i in range(8): #sacar de a ocho bits
b += lista.pop(0) #sacar como cola, de adelante hacia a atras
char = chr(int(b,2)) #generar caracter
msj += char #concatenar mensaje
return msj #regresar mensaje
def obtenerNumeroDeBits(b):# regresa entero a partir de bits
return int(b,2)
def main(): # funcion principal
global paquetes
global mensaje
global c
global cpaq
cpaq = 0
c = 0
mensaje = ''
paquetes = []
servidor() # instancia el servidor
main() # llama a main
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment