Created
February 12, 2013 04:46
-
-
Save pepgonzalez/4760305 to your computer and use it in GitHub Desktop.
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 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