martes, 23 de abril de 2013

Aprende como realizar un Ping Grafico desde java


Hoy comparto con ustedes otro fragmento de unaaplicaciónque desarrolle como tema de tesis ya hemos visto como analizar el disco desde java ,ahora veremos como realizar un ping con el fin de comprobar si existeconexión de RED.

PanelGráficoo monitor de red
Si han utilizado lalibreríaJFreeChart sabes de su potencial que tiene para crear representacionesestadísticas,estalibreríala vamos utilizar(ya viene incluida en el proyecto de descarga) ,la claseChartPanel es aquella que voy a utilizar para crear misgráficosque me representen la existencia de que hay flujo de red o que el usuario esta conectado a internet.

     
TimeSeriesCollection localTimeSeriesCollection = new TimeSeriesCollection();
localTimeSeriesCollection.addSeries(total);
/*********************************************/
DateAxis localDateAxis = new DateAxis("TIEMPO DE RESPUESTA");
NumberAxis localNumberAxis = new NumberAxis("CAPACIDAD");
localDateAxis.setTickLabelFont(new Font("SansSerif", 0, 12));
localNumberAxis.setTickLabelFont(new Font("SansSerif", 0, 12));
localDateAxis.setLabelFont(new Font("SansSerif", 0, 14));
localNumberAxis.setLabelFont(new Font("SansSerif", 0, 14));
XYLineAndShapeRenderer localXYLineAndShapeRenderer = new XYLineAndShapeRenderer(true, false);
localXYLineAndShapeRenderer.setSeriesPaint(0, Color.red);
localXYLineAndShapeRenderer.setSeriesPaint(1, Color.green);
localXYLineAndShapeRenderer.setSeriesStroke(0, new BasicStroke(3.0F, 0, 2));
localXYLineAndShapeRenderer.setSeriesStroke(1, new BasicStroke(3.0F, 0, 2));
XYPlot localXYPlot = new XYPlot(localTimeSeriesCollection, localDateAxis, localNumberAxis, localXYLineAndShapeRenderer);
localDateAxis.setAutoRange(true);
localDateAxis.setLowerMargin(0.0D);
localDateAxis.setUpperMargin(0.0D);
localDateAxis.setTickLabelsVisible(true);
localNumberAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
JFreeChart localJFreeChart = new JFreeChart("FLUJO DE CONEXION DE RED", new Font("SansSerif", 1, 24), localXYPlot, true);
ChartUtilities.applyCurrentTheme(localJFreeChart);
ChartPanel localChartPanel = new ChartPanel(localJFreeChart, true);
localChartPanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(4, 4, 4, 4), BorderFactory.createLineBorder(Color.black)));


Para entender un poco mas el manejo del api JFreeChart les sugiero que visiten suwebsite y se empapen deinformación.

Pero si losgráficosestadísticosde JFreeChart sonestáticoscomo los puedo ANIMAR??
exite una forma de como generar coordenadas aleatorias y esto es con la ayuda deMath.random() y unThreadde esta forma doy coordenadas aleatorias y dando el efecto deanimación pero solo si existeconexión se mostrara los graficos .

  
try {
Thread.sleep(100);
double value = Math.random()*100;
monitor_flujo_red.addTotalObservation(value);
}
catch (InterruptedException e)
{
System.out.println("Error"+e);
}


Ahora como realizamos el PING?
si alguna vez utilizaron la consola de comando del MS-DOS para realizar un ping sabran que el comando o la sintaxis a utilizar es:
ping www.google.com -t

el comando ping se utiliza para saber cuando una pc esta conectada a internet o a otra red,enviando una cantidad de paquetes llamados ICMP.

Pero para ejecutar este comando en java necesitaremos la claseRuntime ,esta clase nos permite ejecutar cualquier comando y junto ala ClaseProcessobtendréel proceso que sera enviado a unInputStreamReader paradespuésser recibido por unBufferedReader


                String pingCMD = COMANDO + ESPACIO + ip+" "+"-t"; 
try{
Runtime ejecuta = Runtime.getRuntime();
Process proceso = ejecuta.exec( pingCMD );
entrada = new InputStreamReader( proceso.getInputStream() );
buffer = new BufferedReader( entrada );
bufferror = new BufferedReader(new InputStreamReader(proceso.getErrorStream()));
}
catch( IOException e ){
System.out.println( e );
}
catch( Exception e ){
System.out.println( e );
}
después de este proceso elBufferedReader quedara cargado y seobtendrálas lineas del proceso o el paquete de datos que envia el ping,para obtener estas lineas necesito unThread (Hilo) des esta forma sabre cuando hay una respuesta y cuando no(si hay o no conexion).

public void run(){
try {
String x=buffer.readLine();
while(x!=null){
x=buffer.readLine();
if(x==null){
hay_señal=false;
}
else
{
hay_señal=true;
}
if(hay_señal==true)
{
moni();
hay_red(padre);
}
else
{
hay_red(padre);
intentos++;
System.out.println("ENTRO CERO CONEXION REINTEENTANDO...."+" "+intentos);
comando_ping pin=new comando_ping(padre,"www.google.com");
pin.start();
}
}

String a=bufferror.readLine();
while(a!=null){
a=bufferror.readLine();
}
} catch (IOException e) {
e.printStackTrace();
}
if(intentos==10)
{
pausa();
}

}






Contraseña solo post del 2012: javafaceContraseña Actual: www.javaface-elblogdelprogramador.com

No hay comentarios:

Publicar un comentario