P3 AST (2017)

Pràctica Catalán
Universidad Universidad Politécnica de Cataluña (UPC)
Grado Ingeniería de Sistemas de Telecomunicación - 2º curso
Asignatura AST
Año del apunte 2017
Páginas 4
Fecha de subida 30/09/2017
Descargas 1
Subido por

Vista previa del texto

AST Nuria Ramos Pràctica 3 MonitorChannel(monitor): AST TSocketReceiver: Nuria Ramos AST Nuria Ramos ReceiveData: Hasta que en la cola de recepción no haya algo, dormimos (nos esperamos), cuando nos despertemos, copiaremos todos los datos del paquete que hemos recibido.
Lo copiaremos usando el consume Segment: ConsumeSegment: Cogemos el primer elemento de la cola de recepción Creamos el contador n, n será la largada de toda la data del paquete.
La length que nos pasan por parámetro será la longitud de los segmentos, porqué el buffer es pequeño y tiene que dividir el paquete en segmentos para copiarlos poco a poco.
1ª vez que lo hace n = Largada del paquete; Length = longitud segmento; RcvSegConsumedBytes = 0; Llegamos al System.arraycopy, que lo k hace es copiar la data, del paquete, desde el offset que nos dice el seg.getDataOffset, en el buf que nos pasan por parámetro (lugar donde se guardara la data del paquete), a partir del offset que nos pasan también, y la cantidad de data que copiamos será n = length.
Luego actualizamos nuestro contador rcvSegConsumedBytes = rcvSegConsumedBytes + n; Este contador nos indica cuanta fata a copiado, al ser la primera vez, habrá copiado una cantidad de length.
2ª vez que lo hace n = Largada del paquete; Length = longitud segmento; RcvSegConsumedBytes = n; n ahora será la largada del paquete - RcvSegConsumedBytes (data que queda por copiar) n seguirá siendo length, volvemos al System.arrayCopy, pero ahora cogerá la data correcta, es decir, donde se había quedado antes, seg.getDataOffset() + rcvSegConsumedBytes. Lo demás igual que la 1ª.
Data copiada 1ª Data copiar ahora rcvSegConsumedBytes Cuando sea la última vez, último segmento, rcvSegConsumedBytes será igual a la largada del paquete, entonces, podremos extraer el paquete de la rcvQueue, para que puedan meter otro nuevo, y ponemos rcvSegConsumedBytes = 0; Se retorna cada vez el numero de data copiado (siempre lenght excepto el último) AST Nuria Ramos processReceivedSegment: es l’encarregat de agafar allò que li envia el sender y copiar-ho en la rcvQueue.
Si la cua està plena, no podrá copiar res.
Si no, posara el segment que li arriba del sender i avisara el receiveData de que te un paquet per copiar.
TSocketSender: Lo que hacemos es dividir el paquete en pequeños segmentos para poder enviarlo más cómodamente.
Los segmentos medirán como máximo sndMSS.
La longitud del paquete medirá length y lo pondremos es una variable minDades.
Mientras se puedan hacer segmentos de sndMSS iremos enviando segmentos de esa medida. segmentize(data, offset,sndMSS); Cuando lleguemos al ultimo paquete, no medirá sndMSS, medirá menos, por eso el segmentize(data, offset,minDades); ...

Comprar Previsualizar