Exemplo n.º 1
0
	def __init__(self):
		super(Ventana, self).__init__()
		
		self._CLIENTE = "Cliente"
		self._SERVIDOR = "Servidor"
		
		self.rol = ""
		self.pasos = []
		self.mensaje = []
		
		self.labelSemanticaT = QLabel("Semantica: ")
		self.labelSemanticaR = QLabel("Semantica: ")
		self.labelSemanticaT.adjustSize()
		self.labelSemanticaR.adjustSize()
		
		#campos de texto transmisor
		self.textoMensajeT = QLineEdit()
		self.textoFramesT = QLineEdit("1")
		self.textoIndicador1T = QLineEdit()
		self.textoACKT = QLineEdit()
		self.textoENQT = QLineEdit()
		self.textoCTRT = QLineEdit()
		self.textoDATT = QLineEdit()
		self.textoPPTT = QLineEdit()
		self.textoLPRT = QLineEdit()
		self.textoNUMT = QLineEdit()
		self.textoInfoT = QLineEdit()
		self.textoIndicador2T = QLineEdit()
		
		#Selectores de campos de control
		self.checkACK = QCheckBox()
		self.checkENQ = QCheckBox()
		self.checkCTR = QCheckBox()
		self.checkDAT = QCheckBox()
		self.checkPPT = QCheckBox()
		self.checkLPR = QCheckBox()
		
		#boton de transmision
		self.botonTransmisor = QPushButton("ENVIAR")
		
		#campos de texto receptor
		self.textoIndicador1R = QLineEdit()
		self.textoACKR = QLineEdit()
		self.textoENQR = QLineEdit()
		self.textoCTRR = QLineEdit()
		self.textoDATR = QLineEdit()
		self.textoPPTR = QLineEdit()
		self.textoLPRR = QLineEdit()
		self.textoNUMR = QLineEdit()
		self.textoInfoR = QLineEdit()
		self.textoIndicador2R = QLineEdit()
		self.textoMensajeR = QLineEdit()
			
		#boton de respuesta
		self.botonRecibir = QPushButton("RECIBIR")
		self.trama = Trama()
		self.trama_anterior = None
		self.transmisor = Transmisor()
		self._inicializar()
Exemplo n.º 2
0
	def _enviar_mensaje(self):
		self.trama_anterior = self.trama
		if not self.pasos:
			if self.trama.esPPT():			
				self._generar_trama()
				if self.trama.esLPR():
					self.pasos.append("LPR")
					self.transmisor.enviar(self.trama())
					self._mostrar_trama(self._SERVIDOR)
				else:
					err = QMessageBox.information(self, "Error", "Trama fuera de contexto")
					self.trama = self.trama_anterior
			elif self.trama.esNull():
				self._generar_trama()
				if self.trama.esPPT():
					self.pasos.append("PPT")
					self.transmisor.enviar(self.trama())
					self._mostrar_trama(self._SERVIDOR)
				else:
					err = QMessageBox.information(self, "Error", "Trama fuera de contexto")
					self.trama = self.trama_anterior
			else:
				err = QMessageBox.information(self, "Error", "Trama fuera de contexto")
		elif "PPT" in self.pasos:
			if self.trama.esLPR() or self.trama.esACK():
				cant = int(self.textoFramesT.text())
				if not self.mensaje:
					self._preparar_mensaje(cant)
				self._generar_trama()
				if self.trama.esDAT():
					if len(self.mensaje)>1:
						self.trama.INFO = self.mensaje.pop(0)
						self.trama.NUM = str(cant - len(self.mensaje))
						self.transmisor.enviar(self.trama())
						self._mostrar_trama(self._SERVIDOR)
					else:
						err = QMessageBox.information(self, "Error", "Ultima trama, envie ENQ")
						self.trama = self.trama_anterior
						del err
				elif self.trama.esENQ():
					if len(self.mensaje)>1:
						err = QMessageBox.information(self, "Error", "Faltan mas tramas, envie DAT")
						self.trama = self.trama_anterior
						del err
					else:
						self.trama.INFO = self.mensaje.pop(0)
						self.trama.NUM = str(cant)
						self.transmisor.enviar(self.trama())
						self.pasos.append("ENQ")
						self.pasos.remove("PPT")
						self._mostrar_trama(self._SERVIDOR)
			else:
				err = QMessageBox.information(self, "Error", "Trama fuera de contexto")
		elif "LPR" in self.pasos:
			if self.trama.esDAT() or self.trama.esENQ():
				self._generar_trama()
				if self.trama.esACK():
					self.trama.INFO=""
					self.transmisor.enviar(self.trama())
					self._mostrar_trama(self._SERVIDOR)
				else:
					err = QMessageBox.information(self, "Error", "Trama fuera de contexto")
					self.trama = self.trama_anterior
					del err
			else:
				err = QMessageBox.information(self, "Error", "Trama fuera de contexto")
		elif "ENQ" in self.pasos:
			if self.trama.esACK():
				err = QMessageBox.information(self, "Terminado", "El mensaje se ha entregado por completo")
				self.textoMensajeT.clear()
				self.textoFramesT.clear()
				self.textoMensajeT.setEnabled(True)
				self.textoFramesT.setEnabled(True)
				self.trama = Trama()
				self.pasos.remove("ENQ")
				self._mostrar_trama(self._SERVIDOR)
			elif self.trama.esENQ():
				self._generar_trama()
				if self.trama.esACK():
					self.trama.INFO=""
					self.transmisor.enviar(self.trama())
					self._mostrar_trama(self._SERVIDOR)
				else:
					err = QMessageBox.information(self, "Error", "Trama fuera de contexto")
					self.trama = self.trama_anterior
					del err
			else:
				err = QMessageBox.information(self, "Error", "Trama fuera de contexto")
Exemplo n.º 3
0
class Ventana(QWidget):
	'''
	Ventana de interfaz grafica para la aplicacion
	'''

	def __init__(self):
		super(Ventana, self).__init__()
		
		self._CLIENTE = "Cliente"
		self._SERVIDOR = "Servidor"
		
		self.rol = ""
		self.pasos = []
		self.mensaje = []
		
		self.labelSemanticaT = QLabel("Semantica: ")
		self.labelSemanticaR = QLabel("Semantica: ")
		self.labelSemanticaT.adjustSize()
		self.labelSemanticaR.adjustSize()
		
		#campos de texto transmisor
		self.textoMensajeT = QLineEdit()
		self.textoFramesT = QLineEdit("1")
		self.textoIndicador1T = QLineEdit()
		self.textoACKT = QLineEdit()
		self.textoENQT = QLineEdit()
		self.textoCTRT = QLineEdit()
		self.textoDATT = QLineEdit()
		self.textoPPTT = QLineEdit()
		self.textoLPRT = QLineEdit()
		self.textoNUMT = QLineEdit()
		self.textoInfoT = QLineEdit()
		self.textoIndicador2T = QLineEdit()
		
		#Selectores de campos de control
		self.checkACK = QCheckBox()
		self.checkENQ = QCheckBox()
		self.checkCTR = QCheckBox()
		self.checkDAT = QCheckBox()
		self.checkPPT = QCheckBox()
		self.checkLPR = QCheckBox()
		
		#boton de transmision
		self.botonTransmisor = QPushButton("ENVIAR")
		
		#campos de texto receptor
		self.textoIndicador1R = QLineEdit()
		self.textoACKR = QLineEdit()
		self.textoENQR = QLineEdit()
		self.textoCTRR = QLineEdit()
		self.textoDATR = QLineEdit()
		self.textoPPTR = QLineEdit()
		self.textoLPRR = QLineEdit()
		self.textoNUMR = QLineEdit()
		self.textoInfoR = QLineEdit()
		self.textoIndicador2R = QLineEdit()
		self.textoMensajeR = QLineEdit()
			
		#boton de respuesta
		self.botonRecibir = QPushButton("RECIBIR")
		self.trama = Trama()
		self.trama_anterior = None
		self.transmisor = Transmisor()
		self._inicializar()
				
	def _inicializar(self):
		self.setWindowTitle("Protocolo de transmision de datos")
		
		#------------------------------------#
		#		ELEMENTOS DEL TRANSMISOR	 #
		#------------------------------------#
		
		#Etiquetas transmisor
		tituloT = QLabel("TRANSMISION")
		labelMensajeT = QLabel("Mensaje a transmitir:")
		labelFramesT = QLabel("Numero de frames:")
		labelIndicador1T = QLabel("INDICADOR")
		labelACKT = QLabel("ACK")
		labelENQT = QLabel("ENQ")
		labelCTRT = QLabel("CTR")
		labelDATT = QLabel("DAT")
		labelPPTT = QLabel("PPT")
		labelLPRT = QLabel("LPR")
		labelNUMT = QLabel("NUM")
		labelInfoT = QLabel("INFORMACION")
		labelIndicador2T = QLabel("INDICADOR")
				
		tituloT.adjustSize()
		labelMensajeT.adjustSize()
		labelFramesT.adjustSize()
		labelIndicador1T.adjustSize()
		labelACKT.adjustSize()
		labelENQT.adjustSize()
		labelCTRT.adjustSize()
		labelDATT.adjustSize()
		labelPPTT.adjustSize()
		labelLPRT.adjustSize()
		labelNUMT.adjustSize()
		labelInfoT.adjustSize()
		labelIndicador2T.adjustSize()
			
		#agregar los elementos al segundo nivel de layout
		fila1 = QHBoxLayout()
		fila2 = QHBoxLayout()
		fila3 = QHBoxLayout()
		fila4 = QHBoxLayout()
		cajaTransmisor = QVBoxLayout()
		
		fila1.addWidget(tituloT)
		fila2.addWidget(labelMensajeT)
		fila2.addWidget(self.textoMensajeT)
		fila2.addWidget(labelFramesT)
		fila2.addWidget(self.textoFramesT)
		fila4.addWidget(self.labelSemanticaT)
		
		fila3_1 = QVBoxLayout()
		fila3_2 = QVBoxLayout()
		fila3_3 = QVBoxLayout()
		fila3_4 = QVBoxLayout()
		fila3_5 = QVBoxLayout()
		fila3_6 = QVBoxLayout()
		fila3_7 = QVBoxLayout()
		fila3_8 = QVBoxLayout()
		fila3_9 = QVBoxLayout()
		fila3_10 = QVBoxLayout()
		
		fila3_1.addWidget(labelIndicador1T)
		fila3_1.addWidget(self.textoIndicador1T)
		fila3_1.setAlignment(Qt.AlignTop)
		fila3_2.addWidget(labelACKT)
		fila3_2.addWidget(self.textoACKT)
		fila3_2.addWidget(self.checkACK)
		fila3_3.addWidget(labelENQT)
		fila3_3.addWidget(self.textoENQT)
		fila3_3.addWidget(self.checkENQ)
		fila3_4.addWidget(labelCTRT)
		fila3_4.addWidget(self.textoCTRT)
		fila3_4.addWidget(self.checkCTR)
		fila3_5.addWidget(labelDATT)
		fila3_5.addWidget(self.textoDATT)
		fila3_5.addWidget(self.checkDAT)
		fila3_6.addWidget(labelPPTT)
		fila3_6.addWidget(self.textoPPTT)
		fila3_6.addWidget(self.checkPPT)
		fila3_7.addWidget(labelLPRT)
		fila3_7.addWidget(self.textoLPRT)
		fila3_7.addWidget(self.checkLPR)
		fila3_8.addWidget(labelNUMT)
		fila3_8.addWidget(self.textoNUMT)
		fila3_8.setAlignment(Qt.AlignTop)
		fila3_9.addWidget(labelInfoT)
		fila3_9.addWidget(self.textoInfoT)
		fila3_9.setAlignment(Qt.AlignTop)
		fila3_10.addWidget(labelIndicador2T)
		fila3_10.addWidget(self.textoIndicador2T)
		fila3_10.setAlignment(Qt.AlignTop)
		fila3.addLayout(fila3_1)
		fila3.addLayout(fila3_2)
		fila3.addLayout(fila3_3)
		fila3.addLayout(fila3_4)
		fila3.addLayout(fila3_5)
		fila3.addLayout(fila3_6)
		fila3.addLayout(fila3_7)
		fila3.addLayout(fila3_8)
		fila3.addLayout(fila3_9)
		fila3.addLayout(fila3_10)
		fila3.addWidget(self.botonTransmisor)
		
		cajaTransmisor.addLayout(fila1)
		cajaTransmisor.addLayout(fila2)
		cajaTransmisor.addLayout(fila3)
		cajaTransmisor.addLayout(fila4)
		
		#------------------------------------#
		#		ELEMENTOS DEL RECEPTOR		 #
		#------------------------------------#
		
		#Etiquetas receptor
		tituloR = QLabel("RECEPCION")
		labelFrameR = QLabel("Trama recibida:")
		labelRespuestaR = QLabel("Recibido: ")
		labelIndicador1R = QLabel("INDICADOR")
		labelACKR = QLabel("ACK")
		labelENQR = QLabel("ENQ")
		labelCTRR = QLabel("CTR")
		labelDATR = QLabel("DAT")
		labelPPTR = QLabel("PPT")
		labelLPRR = QLabel("LPR")
		labelNUMR = QLabel("NUM")
		labelInfoR = QLabel("INFORMACION")
		labelIndicador2R = QLabel("INDICADOR")
		labelMensajeR = QLabel("Mensaje recibido:")
		
		tituloR.adjustSize()
		labelFrameR.adjustSize()
		labelRespuestaR.adjustSize()
		labelIndicador1R.adjustSize()
		labelACKR.adjustSize()
		labelENQR.adjustSize()
		labelCTRR.adjustSize()
		labelDATR.adjustSize()
		labelPPTR.adjustSize()
		labelLPRR.adjustSize()
		labelNUMR.adjustSize()
		labelInfoR.adjustSize()
		labelIndicador2R.adjustSize()
		labelMensajeR.adjustSize()
				
		#agregar los elementos al segundo nivel de layout
		fila5 = QHBoxLayout()
		fila6 = QHBoxLayout()
		fila8 = QHBoxLayout()
		fila9 = QHBoxLayout()
		fila10 = QHBoxLayout()
		fila11 = QHBoxLayout()
		cajaReceptor = QVBoxLayout()
				
		fila5.addWidget(tituloR)
		fila6.addWidget(labelFrameR)
		fila8.addWidget(labelRespuestaR)
		
		#fila9
		fila9_1 = QVBoxLayout()
		fila9_2 = QVBoxLayout()
		fila9_3 = QVBoxLayout()
		fila9_4 = QVBoxLayout()
		fila9_5 = QVBoxLayout()
		fila9_6 = QVBoxLayout()
		fila9_7 = QVBoxLayout()
		fila9_8 = QVBoxLayout()
		fila9_9 = QVBoxLayout()
		fila9_10 = QVBoxLayout()
		
		fila9_1.addWidget(labelIndicador1R)
		fila9_1.addWidget(self.textoIndicador1R)
		fila9_2.addWidget(labelACKR)
		fila9_2.addWidget(self.textoACKR)
		fila9_3.addWidget(labelENQR)
		fila9_3.addWidget(self.textoENQR)
		fila9_4.addWidget(labelCTRR)
		fila9_4.addWidget(self.textoCTRR)
		fila9_5.addWidget(labelDATR)
		fila9_5.addWidget(self.textoDATR)
		fila9_6.addWidget(labelPPTR)
		fila9_6.addWidget(self.textoPPTR)
		fila9_7.addWidget(labelLPRR)
		fila9_7.addWidget(self.textoLPRR)
		fila9_8.addWidget(labelNUMR)
		fila9_8.addWidget(self.textoNUMR)
		fila9_9.addWidget(labelInfoR)
		fila9_9.addWidget(self.textoInfoR)
		fila9_10.addWidget(labelIndicador2R)
		fila9_10.addWidget(self.textoIndicador2R)
		
		fila9.addLayout(fila9_1)
		fila9.addLayout(fila9_2)
		fila9.addLayout(fila9_3)
		fila9.addLayout(fila9_4)
		fila9.addLayout(fila9_5)
		fila9.addLayout(fila9_6)
		fila9.addLayout(fila9_7)
		fila9.addLayout(fila9_8)
		fila9.addLayout(fila9_9)
		fila9.addLayout(fila9_10)
		fila9.addWidget(self.botonRecibir)
		
		fila10.addWidget(self.labelSemanticaR)
		fila11.addWidget(labelMensajeR)
		fila11.addWidget(self.textoMensajeR)
		
		cajaReceptor.addLayout(fila5)
		cajaReceptor.addLayout(fila6)
		cajaReceptor.addLayout(fila8)
		cajaReceptor.addLayout(fila9)
		cajaReceptor.addLayout(fila10)
		cajaReceptor.addLayout(fila11)
		
		#------------------------------------#
				
		#agregar el segundo nivel de layout al panel
		panelTransmisor = QFrame(self)
		panelTransmisor.setFrameShape(QFrame.StyledPanel)
		panelTransmisor.setLayout(cajaTransmisor)
		
		#agregar el segundo nivel de layout al panel
		panelReceptor = QFrame(self)
		panelReceptor.setFrameShape(QFrame.StyledPanel)
		panelReceptor.setLayout(cajaReceptor)
		
		#agregar el panel al separador
		separador = QSplitter(Qt.Vertical)
		separador.addWidget(panelTransmisor)
		separador.addWidget(panelReceptor)
		
		#agregar el separador al primer layout
		caja = QVBoxLayout(self)
		caja.addWidget(separador)
		
		#agregar el layout a la ventana
		self.setLayout(caja)
		
		self.setFixedSize(800, 400)
		self._configurar()
		self.show()
		self.crear_conexion()
		
	def _configurar(self):
		
		self.textoIndicador1T.setEnabled(False)
		self.textoACKT.setEnabled(False)
		self.textoENQT.setEnabled(False)
		self.textoCTRT.setEnabled(False)
		self.textoDATT.setEnabled(False)
		self.textoPPTT.setEnabled(False)
		self.textoLPRT.setEnabled(False)
		self.textoNUMT.setEnabled(False)
		self.textoInfoT.setEnabled(False)
		self.textoIndicador2T.setEnabled(False)
		
		self.textoIndicador1R.setEnabled(False)
		self.textoACKR.setEnabled(False)
		self.textoENQR.setEnabled(False)
		self.textoCTRR.setEnabled(False)
		self.textoDATR.setEnabled(False)
		self.textoPPTR.setEnabled(False)
		self.textoLPRR.setEnabled(False)
		self.textoNUMR.setEnabled(False)
		self.textoInfoR.setEnabled(False)
		self.textoIndicador2R.setEnabled(False)
		self.textoMensajeR.setEnabled(False)
		
		self.checkACK.setEnabled(False)
		self.checkENQ.setEnabled(False)
		self.checkPPT.setEnabled(False)
		self.checkLPR.setEnabled(False)
		
		self.checkACK.stateChanged.connect(self._seleccionarACK)
		self.checkENQ.stateChanged.connect(self._seleccionarENQ)
		self.checkCTR.stateChanged.connect(self._seleccionarCTR)
		self.checkDAT.stateChanged.connect(self._seleccionarDAT)
		self.checkPPT.stateChanged.connect(self._seleccionarPPT)
		self.checkLPR.stateChanged.connect(self._seleccionarLPR)
		self.botonTransmisor.clicked.connect(self._enviar_mensaje)
		self.botonRecibir.clicked.connect(self._recibir_mensaje)
		
		self._mostrar_trama(self._SERVIDOR)
		
	def _seleccionarACK(self, estado):
		if estado == Qt.Checked:
			self.textoACKT.setText("1")
			self.checkPPT.setChecked(False)
			self.checkLPR.setChecked(False)
		else:
			self.textoACKT.setText("0")
		
	def _seleccionarENQ(self, estado):
		if estado == Qt.Checked:
			self.textoENQT.setText("1")
		else:
			self.textoENQT.setText("0")
		
	def _seleccionarCTR(self, estado):
		if estado == Qt.Checked:
			self.textoCTRT.setText("1")
			self.checkDAT.setChecked(False)
			self.checkACK.setEnabled(True)
			self.checkPPT.setEnabled(True)
			self.checkLPR.setEnabled(True)
		else:
			self.textoCTRT.setText("0")
			self.checkACK.setChecked(False)
			self.checkPPT.setChecked(False)
			self.checkLPR.setChecked(False)
			self.checkACK.setEnabled(False)
			self.checkPPT.setEnabled(False)
			self.checkLPR.setEnabled(False)
			self.checkENQ.setEnabled(False)
			
	def _seleccionarDAT(self, estado):
		if estado == Qt.Checked:
			self.textoDATT.setText("1")
			self.checkCTR.setChecked(False)
			self.checkENQ.setEnabled(True)
		else:
			self.textoDATT.setText("0")
			self.checkENQ.setChecked(False)
			self.checkENQ.setEnabled(False)
			
	def _seleccionarPPT(self, estado):
		if estado == Qt.Checked:
			self.textoPPTT.setText("1")
			self.checkACK.setChecked(False)
			self.checkLPR.setChecked(False)
		else:
			self.textoPPTT.setText("0")
			
	def _seleccionarLPR(self, estado):
		
		if estado == Qt.Checked:
			self.textoLPRT.setText("1")
			self.checkACK.setChecked(False)
			self.checkPPT.setChecked(False)
		else:
			self.textoLPRT.setText("0")
			
	def crear_conexion(self):
		tipo = QInputDialog.getItem(self, "Tipo de usuario", "usuario", ["" ,self._SERVIDOR, self._CLIENTE])
		self.rol = str(tipo[0])
		self.setWindowTitle("Protocolo de transmision de datos  --" + self.rol)
		if self.rol == self._SERVIDOR:
			port = QInputDialog.getInt(self, "ingrese puerto", "Puerto", 56032)
			nom = self.transmisor.crear_servidor(port[0])
			msg = QMessageBox.information(self, "Servidor", "El nombre del servidor es: " + nom)
			del msg
			if self.transmisor.conectar_servidor():
				resp = QMessageBox.information(self, "Conectado", "Se ha establecido la conexion con el cliente")
				del resp
		elif self.rol == self._CLIENTE:
			host = QInputDialog.getText(self, "ingrese host", "Host")
			port = QInputDialog.getInt(self, "ingrese puerto", "Puerto", 56032)
			self.transmisor.conectar_cliente((str(host[0]), port[0]))
		else:
			self.destroy()
			
	def _enviar_mensaje(self):
		self.trama_anterior = self.trama
		if not self.pasos:
			if self.trama.esPPT():			
				self._generar_trama()
				if self.trama.esLPR():
					self.pasos.append("LPR")
					self.transmisor.enviar(self.trama())
					self._mostrar_trama(self._SERVIDOR)
				else:
					err = QMessageBox.information(self, "Error", "Trama fuera de contexto")
					self.trama = self.trama_anterior
			elif self.trama.esNull():
				self._generar_trama()
				if self.trama.esPPT():
					self.pasos.append("PPT")
					self.transmisor.enviar(self.trama())
					self._mostrar_trama(self._SERVIDOR)
				else:
					err = QMessageBox.information(self, "Error", "Trama fuera de contexto")
					self.trama = self.trama_anterior
			else:
				err = QMessageBox.information(self, "Error", "Trama fuera de contexto")
		elif "PPT" in self.pasos:
			if self.trama.esLPR() or self.trama.esACK():
				cant = int(self.textoFramesT.text())
				if not self.mensaje:
					self._preparar_mensaje(cant)
				self._generar_trama()
				if self.trama.esDAT():
					if len(self.mensaje)>1:
						self.trama.INFO = self.mensaje.pop(0)
						self.trama.NUM = str(cant - len(self.mensaje))
						self.transmisor.enviar(self.trama())
						self._mostrar_trama(self._SERVIDOR)
					else:
						err = QMessageBox.information(self, "Error", "Ultima trama, envie ENQ")
						self.trama = self.trama_anterior
						del err
				elif self.trama.esENQ():
					if len(self.mensaje)>1:
						err = QMessageBox.information(self, "Error", "Faltan mas tramas, envie DAT")
						self.trama = self.trama_anterior
						del err
					else:
						self.trama.INFO = self.mensaje.pop(0)
						self.trama.NUM = str(cant)
						self.transmisor.enviar(self.trama())
						self.pasos.append("ENQ")
						self.pasos.remove("PPT")
						self._mostrar_trama(self._SERVIDOR)
			else:
				err = QMessageBox.information(self, "Error", "Trama fuera de contexto")
		elif "LPR" in self.pasos:
			if self.trama.esDAT() or self.trama.esENQ():
				self._generar_trama()
				if self.trama.esACK():
					self.trama.INFO=""
					self.transmisor.enviar(self.trama())
					self._mostrar_trama(self._SERVIDOR)
				else:
					err = QMessageBox.information(self, "Error", "Trama fuera de contexto")
					self.trama = self.trama_anterior
					del err
			else:
				err = QMessageBox.information(self, "Error", "Trama fuera de contexto")
		elif "ENQ" in self.pasos:
			if self.trama.esACK():
				err = QMessageBox.information(self, "Terminado", "El mensaje se ha entregado por completo")
				self.textoMensajeT.clear()
				self.textoFramesT.clear()
				self.textoMensajeT.setEnabled(True)
				self.textoFramesT.setEnabled(True)
				self.trama = Trama()
				self.pasos.remove("ENQ")
				self._mostrar_trama(self._SERVIDOR)
			elif self.trama.esENQ():
				self._generar_trama()
				if self.trama.esACK():
					self.trama.INFO=""
					self.transmisor.enviar(self.trama())
					self._mostrar_trama(self._SERVIDOR)
				else:
					err = QMessageBox.information(self, "Error", "Trama fuera de contexto")
					self.trama = self.trama_anterior
					del err
			else:
				err = QMessageBox.information(self, "Error", "Trama fuera de contexto")

	def _recibir_mensaje(self):
		self.trama_anterior = self.trama
		msg = self.transmisor.recibir()
		if len(msg)!=0:
			datos = list(msg.split(self.trama.INDICADOR)[1])
			self.trama.ACK = datos.pop(0)
			self.trama.ENQ = datos.pop(0)
			self.trama.CTR = datos.pop(0)
			self.trama.DAT = datos.pop(0)
			self.trama.PPT = datos.pop(0)
			self.trama.LPR = datos.pop(0)
			self.trama.NUM = datos.pop(0)
			self.trama.INFO = "".join(datos)
			self._mostrar_trama(self._CLIENTE)
			if self.trama.esDAT():
				self.textoMensajeR.setText(self.textoMensajeR.text()+self.trama.INFO)
			elif self.trama.esENQ():
				self.textoMensajeR.setText(self.textoMensajeR.text()+self.trama.INFO)
				self.pasos.remove("LPR")
				self.pasos.append("ENQ")
				err = QMessageBox.information(self, "Terminado", "El mensaje se ha recibido por completo")
			elif self.trama.esPPT():
				self.textoMensajeR.clear()
			elif self.trama.esACK():
				if "ENQ" in self.pasos:
					err = QMessageBox.information(self, "Terminado", "El mensaje se ha entregado por completo")
		else:
			err = QMessageBox.information(self, "Error", "Se ha perdido la conexion")
			del err

	def _preparar_mensaje(self, cant):
		self.textoMensajeT.setEnabled(False)
		self.textoFramesT.setEnabled(False)
		men = str(self.textoMensajeT.text())
		tam = len(men)/cant + 1
		for i in range(cant):
			self.mensaje.append(men[(i*tam):(i+1)*tam])

	def _generar_trama(self):
		self.trama.ACK = str(self.textoACKT.text())
		self.trama.ENQ = str(self.textoENQT.text())
		self.trama.CTR = str(self.textoCTRT.text())
		self.trama.DAT = str(self.textoDATT.text())
		self.trama.PPT = str(self.textoPPTT.text())
		self.trama.LPR = str(self.textoLPRT.text())
		self.trama.NUM = str(self.textoNUMT.text())
		self.trama.INFO = str(self.textoInfoT.text())

	def _mostrar_trama(self, tipo):
		if tipo == self._CLIENTE:
			self.textoIndicador1R.setText(self.trama.INDICADOR)
			self.textoACKR.setText(self.trama.ACK)
			self.textoENQR.setText(self.trama.ENQ)
			self.textoCTRR.setText(self.trama.CTR)
			self.textoDATR.setText(self.trama.DAT)
			self.textoPPTR.setText(self.trama.PPT)
			self.textoLPRR.setText(self.trama.LPR)
			self.textoNUMR.setText(self.trama.NUM)
			self.textoInfoR.setText(self.trama.INFO)
			self.textoIndicador2R.setText(self.trama.INDICADOR)
		elif tipo == self._SERVIDOR:
			self.textoIndicador1T.setText(self.trama.INDICADOR)
			self.textoACKT.setText(self.trama.ACK)
			self.textoENQT.setText(self.trama.ENQ)
			self.textoCTRT.setText(self.trama.CTR)
			self.textoDATT.setText(self.trama.DAT)
			self.textoPPTT.setText(self.trama.PPT)
			self.textoLPRT.setText(self.trama.LPR)
			self.textoNUMT.setText(self.trama.NUM)
			self.textoInfoT.setText(self.trama.INFO)
			self.textoIndicador2T.setText(self.trama.INDICADOR)
		self._actualizar_semantica(tipo)

	def _actualizar_semantica(self, tipo):
		if tipo == self._CLIENTE:
			if self.trama.esACK():
				self.labelSemanticaR.setText("Semantica: Trama de control, recibio con exito.")
			elif self.trama.esPPT():
				self.labelSemanticaR.setText("Semantica: Trama de control, permiso para transmitir.")
			elif self.trama.esLPR():
				self.labelSemanticaR.setText("Semantica: Trama de control, listo para recibir.")
			elif self.trama.esDAT():
				self.labelSemanticaR.setText("Semantica: Trama de datos.")
			elif self.trama.esENQ():
				self.labelSemanticaR.setText("Semantica: Trama de datos, ultima trama")
			elif self.trama.esNull():
				self.labelSemanticaR.setText("Semantica:")
			self.labelSemanticaR.adjustSize()
		elif tipo == self._SERVIDOR:
			if self.trama.esACK():
				self.labelSemanticaT.setText("Semantica: Trama de control, recibio con exito.")
			elif self.trama.esPPT():
				self.labelSemanticaT.setText("Semantica: Trama de control, permiso para transmitir.")
			elif self.trama.esLPR():
				self.labelSemanticaT.setText("Semantica: Trama de control, listo para recibir.")
			elif self.trama.esDAT():
				self.labelSemanticaT.setText("Semantica: Trama de datos.")
			elif self.trama.esENQ():
				self.labelSemanticaT.setText("Semantica: Trama de datos, ultima trama")
			elif self.trama.esNull():
				self.labelSemanticaT.setText("Semantica:")
			self.labelSemanticaT.adjustSize()