diff --git a/Canguru/Cliente.py b/Canguru/Cliente.py
index 07b63d8db3bab8e07d392f4deeb83106f3f33d6c..97f762829d94bc01fd299e5b2e547a66ae800e2b 100755
--- a/Canguru/Cliente.py
+++ b/Canguru/Cliente.py
@@ -1,16 +1,30 @@
 #!/usr/bin/env python
-#################### Protocol ######################################
-# Marca - Destino - Origem - Prioridade - Tamamnho - Menssagem - CRC#
-####################################################################
-
-#Marca - 1 Byte
-#Destino - 4 Bytes
-#Origem - 4 Bytes
-#Prioridade - 4 Bytes
-#Tamanho - 32 bytes
+#################### Protocol #################################################################
+# Marca - Tipo - Destino - Origem - Prioridade - Tamanho - Inic MSG - Mensagem - Fim MSG - CRC#
+###############################################################################################
+
+#Marca - 1 Byte Marca inicio de transmissao, inicio de msg fim de msg
+#Tipo - 0 Token, 1 - Msg
+#Destino - pode variar de 1 a 4
+#Origem - pode variar de 1 a 4
+#Prioridade - pode variar de 0 a 7
+#Tamanho - tanto faz
 #Marca (inicio msg) - 1 Byte
-#Menssagem - ??
-#CRC - 4 bytes
+#Mensagem 
+#CRC - 8 bytes
+
+#Exemplo msg#
+#~11313~oie~352D1036
+# ~ - inic transmissao
+# 1 - tipo da mensagem
+# 1 - destino da mensagem
+# 3 - origem da mensagem
+# 1 - prioridade da mensagem
+# 3 - tamanho da string da mensagem
+# ~ - delimitador de inicio da mensagem
+# oie - mensagem
+# ~ - delimitador de fim da mensagem
+# 352D1036 - CRC 
 
 import socket
 import threading
@@ -22,18 +36,10 @@ SEND_PORT = 5000        # Porta que o Servidor envia
 RECV_PORT = 5001        # Porta que o Servidor recebe
 MACHINE_ID = 1
 
-class FuncThread(threading.Thread):
-    def __init__(self, tarset, *args):
-        self._tarset = tarset
-        self._args = args
-        threading.Thread.__init__(self)
- 
-    def run(self):
-        self._tarset(*self._args)
-
 class Protocol():
     def __init__ (self):
-	self.marca = "~" #Marca
+        self.marca = "~" #Marca
+        self.type = str(1) #Alterar Depois
         self.destiny = None
         self.origin = str(MACHINE_ID)
         self.priority = None
@@ -43,49 +49,59 @@ class Protocol():
 
     #set destiny message
     def setDestiny(self):
-	print 'Destino:'
-	self.destiny = raw_input()
-	self.destiny = str(self.destiny)
+    	sys.stdout.write('Destino: ')
+    	self.destiny = raw_input()
+    	while (0 >= int(self.destiny)) or (int(self.destiny) >= 5):
+    		print 'Entrada Invalida, Por favor escolha entre 1 a 4'
+    		sys.stdout.write('Destino: ')
+    		self.destiny = raw_input()
+    	self.destiny = str(self.destiny)
 
     #set Priority messsage
     def setPriority(self):
-	print 'Prioridade:'
-	self.priority = raw_input()
-	self.priority = str(self.priority)
+    	sys.stdout.write('Prioridade: ')
+    	self.priority = raw_input()
+    	while (0 >= int(self.priority)) or (int(self.priority) >= 8):
+    		print 'Entrada Invalida, Por favor escolha entre 1 a 7'
+        	sys.stdout.write('Prioridade: ')
+    		self.priority = raw_input()		
+    	self.priority = str(self.priority)
 
     #set message 
     def setMessage(self):
-	print   'Mensagem:'
-	self.msg = raw_input()
+    	sys.stdout.write('Mensagem: ')
+    	self.msg = raw_input()
 
     #set sizeof message
     def setSizeof (self):
-	self.sizemsg = len(self.msg)
-	self.sizemsg = str(self.sizemsg) #String convert
-	print self.sizemsg
+    	self.sizemsg = len(self.msg)
+    	self.sizemsg = str(self.sizemsg) #String convert
     
     #set CRC32
     def setCRC32(self):
-	buff = (binascii.crc32(self.msg) & 0xFFFFFFFF)
-	self.crc = "%08X" % buff
+    	buff = (binascii.crc32(self.msg) & 0xFFFFFFFF)
+    	self.crc = "%08X" % buff
 
     def getEmpacotar(self):
-        return  self.marca + self.destiny + self.origin + self.priority +  self.marca + self.sizemsg + self.msg + self.crc
+        return  self.marca + self.type + self.destiny + self.origin + self.priority  + self.sizemsg + self.marca + self.msg + self.marca + self.crc
 
-    def desempacota(self, msg):
+    def setDesempacota(self, msg):
         self.marca = msg[0]
-        self.destiny = msg[1]
-        self.origin = msg[2]
-        self.priority = msg[3]
-        #slint
-                
+        self.type = msg[1]
+        self.destiny = int(msg[2])
+        self.origin = msg[3]
+        self.priority = msg[4]
+        self.msg = msg.split('~', 3)[2]
+        self.crc = msg.split('~', 3)[3]
+
+    def getCRC32(self):
+     	buff = (binascii.crc32(self.msg) & 0xFFFFFFFF)
+    	return "%08X" % buff
 
 def client ():
     udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     dest = (HOST, SEND_PORT)
     print 'Para sair digite exit\n'
-    print 'Mensagem:'
-    #hostname = socket.sethostname()
     protocolMessage = Protocol()
     protocolMessage.setDestiny()
     protocolMessage.setPriority()
@@ -93,11 +109,8 @@ def client ():
     protocolMessage.setSizeof()
     protocolMessage.setCRC32()
     msg = protocolMessage.getEmpacotar()
-    #hostname = socket.sethostname()
-    while True:
-    	#udp.sendto (hostname, dest) # Envia Hostname
-	udp.sendto (msg, dest) #Envia Mensagem
-	print 'Mensagem:'
+    while protocolMessage.msg <> 'exit':
+    	udp.sendto (msg, dest)
         protocolMessage = Protocol()
         protocolMessage.setDestiny()
         protocolMessage.setPriority()
@@ -105,30 +118,33 @@ def client ():
         protocolMessage.setSizeof()
         protocolMessage.setCRC32()
         msg = protocolMessage.getEmpacotar()
-	#hostname = socket.sethostname()
+    threadServer._Thread__stop()
     udp.close()
 
 def server ():
-    print 'Estou no Server'
     udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
     orig = (HOST, RECV_PORT)
     udp.bind(orig)
+    protocolDescompactMessage = Protocol()
     while True:
-        #hostname, cliente = udp.recvfrom(1024)
         msg, cliente = udp.recvfrom(1024)
-        #print hostname,':', msg
-        print msg
-        print 'Estou no Server'
+        protocolDescompactMessage.setDesempacota(msg)
+        if protocolDescompactMessage.destiny == MACHINE_ID:
+        	if protocolDescompactMessage.crc == protocolDescompactMessage.getCRC32():
+        		print msg
+        		print '\n' + protocolDescompactMessage.origin + ' Escreveu: ' + protocolDescompactMessage.msg
+        	else:
+        		print 'ERRO, A MENSAGEM FOI RECIBIDA ERRADA'
     udp.close()
-
-#def killThread ():
-#######################MAIN#############################
+    
+#------------------MAIN-----------------#
 
 if len(sys.argv) > 1:
     AUX = RECV_PORT
     RECV_PORT = SEND_PORT
     SEND_PORT = AUX
 
-threadServer = FuncThread (server)
+threadServer = threading.Thread(target=server)
+threadClient = threading.Thread(target=client)
 threadServer.start()
-client ()
+threadClient.start()
\ No newline at end of file