Desarrollar un programa que simule el interfaz software de entrada a una tarjeta de red siguiendo las siguientes especificaciones.
La entrada está implementada mediante dos tipos de buffers. Un primer buffer donde van entrando todas las tramas según van llegando, que tiene un espacio máximo de 4 tramas. Y un segundo buffer de espacio ilimitado que tiene tres puertos (entendiendo por puertos, zonas de almacenamiento distintas). La entrada debe implementar un mecanismo para mostrar el contenido de sus buffers.
Cuando el primer buffer se llene, enviará al segundo buffer de forma automática las primeras 2 tramas con mayor prioridad. Y así sucesivamente.
Existen distintos tipos de tramas, aunque de momento solo tendremos en cuenta las tramas TCP y UDP (en el futuro puede que tengamos que soportar más). Ahora bien, todas las tramas sean del tipo que sean, contienen el puerto al que van dirigidas (1, 2 o 3), su prioridad (de 1 a 10, siendo 1 la mayor prioridad) y el contenido de la trama.
Nota: ante dos tramas con el mismo valor de prioridad, tendrá más prioridad aquella cuyo contenido esté por delante siguiendo el orden del abecedario.
Por último, crearemos una clase Actividad7 donde instanciaremos el sistema de entrada a la tarjeta de red y le enviaremos 6 tramas de distintos tipos y con puertos y prioridades aleatorias. Una vez se hayan enviado 5 tramas, se mostrará el contenido de los buffers del sistema de entrada.
Realizar previamente el Diagrama de Clases UML.
Clase InterfazRed
Cita:
Clase Buffer1public class InterfazRed {
//Atributos
private Buffer1 bf1 = new Buffer1();
private Buffer2 bf2 = new Buffer2();
public void agregarTrana(Object trama) {
if(bf1.getTamanio() <4) {
bf1.agregarTrama(trama);
}else{
//Extraer las dos primeras tramas del primer buffer
bf2.agregarTrama(bf1.extraerTramaMasPrioritaria()) ;
bf2.agregarTrama(bf1.extraerTramaMasPrioritaria()) ;
bf1.agregarTrama(trama);
}
}//Fin funcion
public void mostrarBuffers(){
bf1.mostrarContenido();
bf2.mostrarContenido();
}
}
//Atributos
private Buffer1 bf1 = new Buffer1();
private Buffer2 bf2 = new Buffer2();
public void agregarTrana(Object trama) {
if(bf1.getTamanio() <4) {
bf1.agregarTrama(trama);
}else{
//Extraer las dos primeras tramas del primer buffer
bf2.agregarTrama(bf1.extraerTramaMasPrioritaria()) ;
bf2.agregarTrama(bf1.extraerTramaMasPrioritaria()) ;
bf1.agregarTrama(trama);
}
}//Fin funcion
public void mostrarBuffers(){
bf1.mostrarContenido();
bf2.mostrarContenido();
}
}
Cita:
i
Cita:
Clase Buffer2mport java.util.ArrayList;
import java.util.Iterator;
import java.util.Collections;
public class Buffer1{
//Atributos
private ArrayList<Object> buffer01 = new ArrayList<Object>();
public void agregarTrama(Object trama){
buffer01.add(trama);
ordTramaPrioridad();
}
public Object extraerTramaMasPrioritaria(){
Object trama = buffer01.get(0);
buffer01.remove(0);
return trama;
}
public int gerTamanio(){
return buffer01.size();
}
public void ordTramaPrioridad(){
Collections.sort(buffer01, new OrdenarTramaPorPrioridad());
}
public void mostrarContenido(){
System.out.println("============================== =============================");
System.out.println(" CONTENIDO DEL PRIMER BUFFER [BUFFER1]");
System.out.println("============================== =============================");
Iterator<Object> it = buffer01.iterator();
while(it.hasNext()){
Object obj;
obj = it.next();
if(obj.getClass().getName().equals("tramaTCP")){
tramaTCP tcpAux;
tcpAux = (tramaTCP)obj;
System.out.println("--Trama TCP-----------------------");
System.out.println("PUERTO: " + tcpAux.getPuerto());
System.out.println("PRIORIDAD: " + tcpAux.getPrioridad());
System.out.println("CONTENIDO: " + tcpAux.getContenido());
System.out.println("--Trama TCP-----------------------");
}else{
tramaUDP udpAux;
udpAux = (tramaUDP)obj;
System.out.println("--Trama UDP-----------------------");
System.out.println("PUERTO: " + udpAux.getPuerto());
System.out.println("PRIORIDAD: " + udpAux.getPrioridad());
System.out.println("CONTENIDO: " + udpAux.getContenido());
System.out.println("--Trama UDP-----------------------");
}
}
}
}//Fin clase
import java.util.Iterator;
import java.util.Collections;
public class Buffer1{
//Atributos
private ArrayList<Object> buffer01 = new ArrayList<Object>();
public void agregarTrama(Object trama){
buffer01.add(trama);
ordTramaPrioridad();
}
public Object extraerTramaMasPrioritaria(){
Object trama = buffer01.get(0);
buffer01.remove(0);
return trama;
}
public int gerTamanio(){
return buffer01.size();
}
public void ordTramaPrioridad(){
Collections.sort(buffer01, new OrdenarTramaPorPrioridad());
}
public void mostrarContenido(){
System.out.println("============================== =============================");
System.out.println(" CONTENIDO DEL PRIMER BUFFER [BUFFER1]");
System.out.println("============================== =============================");
Iterator<Object> it = buffer01.iterator();
while(it.hasNext()){
Object obj;
obj = it.next();
if(obj.getClass().getName().equals("tramaTCP")){
tramaTCP tcpAux;
tcpAux = (tramaTCP)obj;
System.out.println("--Trama TCP-----------------------");
System.out.println("PUERTO: " + tcpAux.getPuerto());
System.out.println("PRIORIDAD: " + tcpAux.getPrioridad());
System.out.println("CONTENIDO: " + tcpAux.getContenido());
System.out.println("--Trama TCP-----------------------");
}else{
tramaUDP udpAux;
udpAux = (tramaUDP)obj;
System.out.println("--Trama UDP-----------------------");
System.out.println("PUERTO: " + udpAux.getPuerto());
System.out.println("PRIORIDAD: " + udpAux.getPrioridad());
System.out.println("CONTENIDO: " + udpAux.getContenido());
System.out.println("--Trama UDP-----------------------");
}
}
}
}//Fin clase
Cita:
Clase OrdenarTramaPorPrioridad import java.util.ArrayList;
import java.util.Iterator;
public class Buffer2 {
private ArrayList<Object> puerto01 = new ArrayList<Object>();
private ArrayList<Object> puerto02 = new ArrayList<Object>();
private ArrayList<Object> puerto03 = new ArrayList<Object>();
// Otros metodos
public void agregarTrama(Object trama){
Trama obj = (Trama)trama;
switch(obj.getPuerto()) {
case 1:
puerto01.add(trama);
break;
case 2:
puerto02.add(trama);
break;
case 3:
puerto03.add(trama);
break;
}
}//Fin funcion
public void mostrarContenido(){
System.out.println("============================== ===========================");
System.out.println("CONTENIDO DEL SEGUNDO BUFFER (BUFFER2)");
System.out.println("============================== ===========================");
System.out.println("Tramas en Puerto 01");
Iterator<Object> iterador = puerto01.iterator();
leerPuerto(iterador);
System.out.println("Tramas en Puerto 02");
iterador = puerto02.iterator();
leerPuerto(iterador);
System.out.println("Tramas en Puerto 03");
iterador = puerto03.iterator();
leerPuerto(iterador);
}
private void leerPuerto(Iterator<Object> it){
while(it.hasNext()){
Object obj;
obj = it.next();
if(obj.getClass().getName().equals("tramaTCP")){
tramaTCP tcpAux;
tcpAux = (tramaTCP)obj;
System.out.println("--Trama TCP-----------------------");
System.out.println("PUERTO: " + tcpAux.getPuerto());
System.out.println("PRIORIDAD: " + tcpAux.getPrioridad());
System.out.println("CONTENIDO: " + tcpAux.getContenido());
System.out.println("--Trama TCP-----------------------");
}else{
tramaUDP udpAux;
udpAux = (tramaUDP)obj;
System.out.println("--Trama UDP-----------------------");
System.out.println("PUERTO: " + udpAux.getPuerto());
System.out.println("PRIORIDAD: " + udpAux.getPrioridad());
System.out.println("CONTENIDO: " + udpAux.getContenido());
System.out.println("--Trama UDP-----------------------");
}
}
}
}//Fin clase
import java.util.Iterator;
public class Buffer2 {
private ArrayList<Object> puerto01 = new ArrayList<Object>();
private ArrayList<Object> puerto02 = new ArrayList<Object>();
private ArrayList<Object> puerto03 = new ArrayList<Object>();
// Otros metodos
public void agregarTrama(Object trama){
Trama obj = (Trama)trama;
switch(obj.getPuerto()) {
case 1:
puerto01.add(trama);
break;
case 2:
puerto02.add(trama);
break;
case 3:
puerto03.add(trama);
break;
}
}//Fin funcion
public void mostrarContenido(){
System.out.println("============================== ===========================");
System.out.println("CONTENIDO DEL SEGUNDO BUFFER (BUFFER2)");
System.out.println("============================== ===========================");
System.out.println("Tramas en Puerto 01");
Iterator<Object> iterador = puerto01.iterator();
leerPuerto(iterador);
System.out.println("Tramas en Puerto 02");
iterador = puerto02.iterator();
leerPuerto(iterador);
System.out.println("Tramas en Puerto 03");
iterador = puerto03.iterator();
leerPuerto(iterador);
}
private void leerPuerto(Iterator<Object> it){
while(it.hasNext()){
Object obj;
obj = it.next();
if(obj.getClass().getName().equals("tramaTCP")){
tramaTCP tcpAux;
tcpAux = (tramaTCP)obj;
System.out.println("--Trama TCP-----------------------");
System.out.println("PUERTO: " + tcpAux.getPuerto());
System.out.println("PRIORIDAD: " + tcpAux.getPrioridad());
System.out.println("CONTENIDO: " + tcpAux.getContenido());
System.out.println("--Trama TCP-----------------------");
}else{
tramaUDP udpAux;
udpAux = (tramaUDP)obj;
System.out.println("--Trama UDP-----------------------");
System.out.println("PUERTO: " + udpAux.getPuerto());
System.out.println("PRIORIDAD: " + udpAux.getPrioridad());
System.out.println("CONTENIDO: " + udpAux.getContenido());
System.out.println("--Trama UDP-----------------------");
}
}
}
}//Fin clase
Cita:
CLase Tramaimport java.util.Comparator;
public class OrdenarTramaPorPrioridad implements Comparator<Object>{
// Ordena las tramas primero por prioridad y despues por contenido.
public int compare (Object obj1, Object obj2){
Trama trama1 = (Trama)obj1;
Trama trama2 = (Trama)obj2;
if(trama1.getPrioridad() == trama2.getPrioridad()){
return trama1.getContenido().compareToIgnoreCase(trama2.g etContenido());
}else{
return trama1.getPrioridad() = trama2.getPrioridad();
}
}
}//Fin clase
public class OrdenarTramaPorPrioridad implements Comparator<Object>{
// Ordena las tramas primero por prioridad y despues por contenido.
public int compare (Object obj1, Object obj2){
Trama trama1 = (Trama)obj1;
Trama trama2 = (Trama)obj2;
if(trama1.getPrioridad() == trama2.getPrioridad()){
return trama1.getContenido().compareToIgnoreCase(trama2.g etContenido());
}else{
return trama1.getPrioridad() = trama2.getPrioridad();
}
}
}//Fin clase
Cita:
Clases TramaUDP y TCPpublic class Trama{
//ATRIBUTOS
private int puerto; //1,2 o 3
private int prioridad; //De 1 (max) a 10(min)
String contenido = "VACIO";
//Constructor
public Trama(int p, int pri, String co){
puerto =p;
prioridad = pri;
contenido = co;
}
//SETTERS
public void setPuerto(int param){
puerto = param;
}
public void setPrioridad(int param){
prioridad = param;
}
public void setContenido(String param){
contenido = param;
}
//GETTERS
public int getPuerto(){
return puerto;
}
public int getPrioridad(){
return prioridad;
}
public String getContenido(){
return contenido;
}
}
//ATRIBUTOS
private int puerto; //1,2 o 3
private int prioridad; //De 1 (max) a 10(min)
String contenido = "VACIO";
//Constructor
public Trama(int p, int pri, String co){
puerto =p;
prioridad = pri;
contenido = co;
}
//SETTERS
public void setPuerto(int param){
puerto = param;
}
public void setPrioridad(int param){
prioridad = param;
}
public void setContenido(String param){
contenido = param;
}
//GETTERS
public int getPuerto(){
return puerto;
}
public int getPrioridad(){
return prioridad;
}
public String getContenido(){
return contenido;
}
}
Cita:
public class tramaTCP extends Trama{
private String id = "Soy trama TCP";
//Constructor
public tramaTCP(int p, int pri, String co){
super(p,pri,co);
}
public String getId(){
return id;
}
}
public class tramaUDP extends Trama{
private String id = "Soy trama UDP";
//Constructor
public tramaUDP(int p, int pri, String co){
super(p,pri,co);
}
public String getId(){
return id;
}
}
private String id = "Soy trama TCP";
//Constructor
public tramaTCP(int p, int pri, String co){
super(p,pri,co);
}
public String getId(){
return id;
}
}
public class tramaUDP extends Trama{
private String id = "Soy trama UDP";
//Constructor
public tramaUDP(int p, int pri, String co){
super(p,pri,co);
}
public String getId(){
return id;
}
}