domingo, 29 de enero de 2012

Tutorial Java 8 - Sockets

En este capítulo intentaré mostrar el uso de sockets con un programa muy sencillo pero a la vez muy...cutre, podría escribirlo más bonito pero no más claro:

Clase servidor.java:

import java.io.*;
import java.net.*;

public class servidor {

public static void main(String[] args) throws IOException { /*mejor con try & catch */
ServerSocket puerto = null; //inicializamos
Socket canal = null;
InputStream buffer_in; /* creamos un buffer de datos para el canal de entrada*/
DataInputStream contenedor_flujo; /*creamos un sitio donde guardar el contenedor que nos envian, aviso según el eclipse de esta forma es no necesariamente seguro para acceso multithread*/
puerto = new ServerSocket(11000);  /*por donde recibimos los datos*/
canal = puerto.accept();/*escucha conexiones en ese puerto y las acepta*/
buffer_in = canal.getInputStream();/*trae un flujo de datos desde nuestro socket*/
contenedor_flujo = new DataInputStream(buffer_in); /*guardamos ese flujo de datos en el contenedor*/
String string = new String(contenedor_flujo.readUTF());/*obtiene cadena de la información del contenedor que está codificada en UTF-8 modificado*/
System.out.print(string); /*imprimimos la cadena*/
contenedor_flujo.close();/*cerramos el contenedor*/
buffer_in.close();/*cerramos el buffer*/
canal.close();/*cerramos el canal*/
}
}


Clase cliente.java (como veis es similar en muchos aspectos) :

import java.io.*;
import java.net.*;


public class cliente {

public static void main(String[] args) throws IOException {
Socket canal = null;
OutputStream buffer_out;
DataOutputStream contenedor;
canal = new Socket("127.0.0.1", 11000);/*indicamos a que ip y puerto enviamos,en este caso la ip localhost(nuestro equipo)*/
buffer_out = canal.getOutputStream();
contenedor = new DataOutputStream(buffer_out);
String info_a_enviar = "Enviamos información\n";
contenedor.writeUTF(info_a_enviar);/*escribe la información en UTF-8 modificado*/
contenedor.close();
buffer_out.close();
canal.close();
}
}

miércoles, 25 de enero de 2012

Cómo compartir carpetas entre Windows 7 y windows Vista

Si has buscado esto en google supongo que quieres evitar que desde vista te pida una cuenta y contraseña para entrar en la carpeta alojada en el equipo con windows 7, para eso puedes compartirla siguiendo estos pasos (todo desde el equipo con windows 7):

1. Panel de control
2. Redes e internet
3. Elegir grupo en el hogar y opciones de uso compartido
4. Cambiar configuración de uso compartido avanzado
5. Desactivar el uso compartido con protección por contraseña

Guardamos cambios, luego sobre la carpeta que queremos compartir:

1. Click derecho
2. Propiedades
3. Uso compartido avanzado
4. Compartir esta carpeta
5. Configuramos los permisos

Aceptar guardar y listo.

Nota: Ambos equipos deben formar parte del mismo grupo de trabajo.


martes, 24 de enero de 2012

Tutorial Java 7 - Recursividad

La recursividad consiste en llamar a un método desde el mismo método creando de esta forma estructuras de control útiles, ejemplo:

Calcular la suma de un número más sus naturales anteriores:

import java.util.Scanner; 

public class recursividad {

public static void main(String[] args) {

    Scanner entrada = new Scanner(System.in);
    System.out.print("Introduzca un número: ");
    int num = entrada.nextInt();
    System.out.println("La suma de naturales igual y menores a " + num + " es " + suma(num));
  }

  public static long suma(int num) {
    if (num == 0) 
      return 0;
    else
      return num + suma(num - 1);  /*entramos en la clase pero con el número anterior*/
  }
}

Tutorial Java 6 - Herencia

La herencia en java consiste en crear clases(hijo) que hereden atributos de otra clase(padre), es decir, disponer en la nueva clase de las variables y métodos del padre sin tener que repetirlos, para implementar esto usaremos la clase ordenador de cualquiera de los anteriores tutoriales y crearemos estas clases:

Empezamos por la clase hijo(herencia.java), que es la que tiene las novedades:

public class herencia extends ordenador {
/*extends ordenador indica que hereda los atributos de la clase ordenador.java*/
String Sistema_operativo;
/*Añadimos por ejemplo esta neueva variable, para que esta clase sea más específica*/
public herencia(String proce, String gra, int frec, int me, String SO)
/*Constructor similar al de ordenador pero ampliado*/
{
super(proce, gra, frec, me);
/* super sirve para utilizar las variables de la clase padre, es decir las usamos(llenamos) desde aqui*/
Sistema_operativo = SO;
}
/* Añadimos get y set para la nueva variable */
public String getSistema_operativo() {
return Sistema_operativo;
}
public void setSistema_operativo(String sistema_operativo) {
Sistema_operativo = sistema_operativo;
}
}

Y continuamos con la clase principal(programa1.java):

import java.util.Scanner;
public class programa1 {

public static void main(String[] args) {
herencia software;
software = new herencia("string", "string", 0, 0, "String"); 

/*inicializamos las variables*/
/*y el resto de código es similar al del tutorial de objetos*/

Scanner entrada = new Scanner(System.in);
System.out.println("Introduzca tipo de procesador o escriba salir:");
String procesador = entrada.nextLine();
System.out.println("Introduzca frecuencia en GHz:");
int frecuencia = entrada.nextInt();
System.out.println("Introduzca tipo de gráfica:");
entrada.next();
String grafica = entrada.nextLine();
System.out.println("Introduzca cantidad de memoria en Mb:");
int memoria = entrada.nextInt();
System.out.println("Introduzca sistema operativo:");
entrada.nextLine();
String so = entrada.nextLine();

System.out.println("Usa el siguiente sistema operativo1:" + so);

software.setProcesador(procesador);
software.setFrecuencia(frecuencia);
software.setGrafica(grafica);
software.setMemoria(memoria);
software.setSistema_operativo(so);

System.out.println("Tiene un procesador de tipo " + software.getProcesador() + " a " + software.getFrecuencia() + " GHz");
System.out.println("Tiene una gráfica de tipo " + software.getGrafica() + "con " + software.getMemoria() + " Mb");
System.out.println("Usa el siguiente sistema operativo: " + software.getSistema_operativo());
}

}


domingo, 22 de enero de 2012

Tutorial Java 5 - Collections

Collections es una interfaz que nos permitirá ordenar la lista con respecto a los parámetros que queramos.
Ejemplo comentado de como ordenar con Collections, usamos de base las clases del tutorial 4:

En la clase ordenador añadimos:

public class ordenador implements Comparable<ordenador>{ }
cambiamos int por Integer:
private Integer frecuencia, memoria;
Y escribimos el método señalando lo que vamos a comparar:

public int compareTo(ordenador o) {
return (frecuencia.compareTo(((ordenador) o).frecuencia));
}


En la clase programa1 añadimos:
import java.util.Collections;
Y después del bucle While, para que al terminar la lista la ordene con nuestro método:
Collections.sort(ordenadores);


Ahora al presentar los ordenadores los pondrá en orden ascendente de frecuencias.

Códigos completos:

Clase programa1:

import java.util.Collections;
import java.util.LinkedList;
import java.util.Scanner;
public class programa1 {

static private LinkedList<ordenador> ordenadores = new LinkedList<ordenador>();
public static void main(String[] args) {

ordenador cpu;
cpu = new ordenador("string", "string", 0, 0);

String procesador="procesador";
String salir = "salir";
while(!(procesador.equals(salir)))
{
Scanner entrada = new Scanner(System.in);
System.out.println("Introduzca tipo de procesador o escriba salir:");
procesador = entrada.nextLine();
if (procesador.equals(salir)) break;
System.out.println("Introduzca frecuencia en GHz:");
int frecuencia = entrada.nextInt();
System.out.println("Introduzca tipo de gráfica:");
entrada.next();
String grafica = entrada.nextLine();
System.out.println("Introduzca cantidad de memoria en Mb:");
int memoria = entrada.nextInt();

ordenadores.add(new ordenador(procesador, grafica, frecuencia, memoria));
}
Collections.sort(ordenadores);

for (ordenador o : ordenadores) //recorremos los objetos "o" de tipo ordenador de la lista ordenadores
{
System.out.println("Tiene un procesador de tipo " + o.getProcesador() + " a " + o.getFrecuencia() + " GHz");
System.out.println("Tiene una gráfica de tipo " + o.getGrafica() + "con " + o.getMemoria() + " Mb");
}
}
}

Clase ordenador:


public class ordenador implements Comparable<ordenador> {
private String procesador, grafica;
private Integer frecuencia, memoria;

public ordenador(String proce, String gra, int frec, int me)
{
procesador=proce;
grafica=gra;
frecuencia=frec;
memoria=me;
}

public String getProcesador() {
return procesador;
}

public void setProcesador(String procesador) {
this.procesador = procesador;
}

public String getGrafica() {
return grafica;
}

public void setGrafica(String grafica) {
this.grafica = grafica;
}

public int getFrecuencia() {
return frecuencia;
}

public void setFrecuencia(int frecuencia) {
this.frecuencia = frecuencia;
}

public int getMemoria() {
return memoria;
}

public void setMemoria(int memoria) {
this.memoria = memoria;
}

public int compareTo(ordenador o) {
return (frecuencia.compareTo(((ordenador) o).frecuencia));
}

}


Opcional en orden descendente con comparator:
Añadimos en la clase principal:
import java.util.Comparator; 
Si queremos que sea en orden descendente cambiamos el collections.sort por este:
Collections.sort(ordenadores,new ordenar());
 y creamos la clase ordenar en la clase principal:
class ordenar implements Comparator<ordenador> {
public int compare(ordenador o_1, ordenador o_2) {
return (-(o_1.compareTo(o_2)));
}
}

sábado, 21 de enero de 2012

Tutorial Java 4 - Lista enlazada

Una lista enlazada (LinkedList) nos permitirá tener una lista de objetos que podremos recorrer cómodamente para luego mostrarlas, facilitando además tareas de ordenación, en este capítulo simplemente crearemos una lista enlazada, añadiremos objetos y luego mostraremos su contenido:
Usando la misma clase ordenador del tutorial 2, y haciendo unas pequeñas modificaciones en la clase principal:


import java.util.LinkedList;  //importamos la librería correspondiente
import java.util.Scanner;
public class programa1 {
static private LinkedList<ordenador> ordenadores = new LinkedList<ordenador>(); /*Creamos la lista enlazada LinkedList<nombre_de_la_clase> nombre_de_la_lista = new LinkedList<nombre_de_la_clase>*/
public static void main(String[] args) {

ordenador cpu;  
cpu = new ordenador("string", "string", 0, 0);

String procesador="procesador";
String salir = "salir";
while(!(procesador.equals(salir))) //bucle para añadir ordenadores hasta que queramos salir
{
Scanner entrada = new Scanner(System.in);
System.out.println("Introduzca tipo de procesador o escriba salir:");
procesador = entrada.nextLine();
if (procesador.equals(salir)) break;
System.out.println("Introduzca frecuencia en GHz:");
int frecuencia = entrada.nextInt();
System.out.println("Introduzca tipo de gráfica:");
entrada.next();
String grafica = entrada.nextLine();
System.out.println("Introduzca cantidad de memoria en Mb:");
int memoria = entrada.nextInt();

ordenadores.add(new ordenador(procesador, grafica, frecuencia, memoria)); /*añadimos nuevo objeto con sus propiedades*/
}

for (ordenador o : ordenadores) //recorremos los objetos "o" de tipo ordenador de la lista ordenadores
{
System.out.println("Tiene un procesador de tipo " + o.getProcesador() + " a " + o.getFrecuencia() + " GHz");
System.out.println("Tiene una gráfica de tipo " + o.getGrafica() + "con " + o.getMemoria() + " Mb");

}
}
}


Tutorial Java 3 - Ficheros


Pequeño ejemplo comentado:

/*Añadimos las librerías de ficheros, excepción entrada/salida, escritura y lectura*/
import java.io.File;    
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Scanner;


public class fichero {


public static void main(String[] args) throws IOException { //importante el throws para que no proteste
Scanner entrada = new Scanner(System.in);
System.out.println("Que cadena quiere guardar en el fichero? ");
String cadena = entrada.nextLine();
System.out.println("En que fichero quiere escribir los datos? ");
String fichero = entrada.nextLine();


File fichero_variable = new File(fichero); /*nueva variable de tipo File a la que le asignamos la dirección del fichero*/

if (fichero_variable.exists()) //Comprobamos que el fichero no exista para no sobreescribir
{
System.out.println("Ya existe un fichero con ese nombre");
System.exit(0);
}


PrintWriter salida = new PrintWriter(fichero_variable); //uso similar al Scanner

salida.println(cadena); //destino.escribir(cadena)
salida.close(); //cerramos la salida, obligatorio para que se guarden los cambios


Scanner entrada_fichero = new Scanner(fichero_variable); /*un Scanner cambiando System.in por el fichero nos permite su lectura*/

System.out.println("Dentro del fichero " + fichero + " hay " + entrada_fichero.nextLine());

entrada.close(); //cerramos la entrada
}

}

Edit: repasando el codigo sería entrada_fichero.close()