Una forma sencilla y rápida de aprender JAVA, observando y deduciendo cómo se comporta el lenguaje a través de ejemplos prácticos.

martes, 27 de diciembre de 2011

Comunicación entre procesos en diferentes máquinas de una red (Sockets)

Para ello necesitamos 2 codigos, uno con funcion servidor y otro de cliente.
Primero entramos en la IDE de Netbeans, creamos dos nuevos proyectos de tipo "Java aplication". Uno lo llamaremos
"socket_servidor" y el otro "socket_cliente".


* Codigo servidor:

package socket_servidor;

import java.io.DataOutputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class Socket_servidor {
static final int PUERTO = 5000;
public Socket_servidor( ) {
try {
ServerSocket skServidor = new ServerSocket(PUERTO);
System.out.println("Esperando cliente..." );
Socket skCliente = skServidor.accept();
System.out.println("Recibido cliente y mandando saludo");
OutputStream aux = skCliente.getOutputStream();
DataOutputStream flujo = new DataOutputStream( aux );
flujo.writeUTF( "Saludos");
skCliente.close();
} catch( Exception e ) { System.out.println(e); }
}
public static void main(String[] args) {
new Socket_servidor();
}
}


* Codigo cliente:

package socket_cliente;

import java.io.DataInputStream;
import java.io.InputStream;
import java.net.Socket;

public class Socket_cliente {
static final String HOST = "localhost";
static final int PUERTO = 5000;
public Socket_cliente( ) {
try {
Socket skCliente = new Socket( HOST , PUERTO );
InputStream aux = skCliente.getInputStream();
DataInputStream flujo = new DataInputStream( aux );
System.out.println( "Servidor dice: " + flujo.readUTF() );
skCliente.close();
} catch( Exception e ) { System.out.println(e); }
}
public static void main(String[] args) {
new Socket_cliente();
}
}


- Resultado en pantalla del servidor:

run:
Esperando cliente...
Recibido cliente y mandando saludo
BUILD SUCCESSFUL (total time: 8 seconds)

Nota: Hasta que no se ejecute el codigo de cliente permanecerá en estado de "Esperando cliente..."


- Resultado en pantalla del cliente:

run:
Servidor dice: Saludos
BUILD SUCCESSFUL (total time: 0 seconds)

Nota 1: Debemos arrancar primero el codigo "socket_servidor" antes que el "socket cliente".
Nota 2: Asegurarse de usar puertos por encima de 1024. En nuestro caso utilizamos el puerto 5000.
Nota 3: Si tenemos puesto el proceso del servidor en otro PC dentro una misma red local, solo tenemos que modificar en el codigo del cliente la variable String HOST = "localhost" por la IP del servidor.
Ej:

String HOST = "192.168.0.100"; // IP donde este arrancado la aplicación "socket_servidor"



viernes, 23 de diciembre de 2011

Ejecución de comandos MySql en codigo java.

Se crea una tabla llamada contactos. Seguidamente se agregan datos (registros), luego se hace una consulta y muestra el resultado en consola. Finalmente elimina la tabla y cierra la base de datos.

Codigo:

package mysql1;
import java.sql.*;
public class MySQL1 {
static String bd = "mi_base";
static String login = "root";
static String password = "";
static String url = "jdbc:mysql://localhost:3306/"+bd;
public static void main(String[] args) throws Exception {
Connection conn = null;
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(url,login,password);
if (conn != null) {
System.out.println("-Abierta base de datos " + url + " - Ok");

// Crear tabla contacto
Statement st = conn.createStatement();//Permite comandos SQL
st.executeUpdate( "CREATE TABLE contacto ("
+ "id INT AUTO_INCREMENT, "
+ "PRIMARY KEY(id), "
+ "nombre VARCHAR(20), "
+ "apellidos VARCHAR(20), "
+ "telefono VARCHAR(20))" );
System.out.println("-Creada tabla (contacto) - Ok");

// Insertar datos a la tabla
String nombres[]={"Juan","Maria","Antonio"};
String apellidos[]={"Sanchez","Jimenez","Moreno"};
String telefonos[]={"918971234","918984621","935741254"};
for (int i=0;i < nombres.length;i++) {
st.executeUpdate("INSERT INTO contacto ("
+ "nombre, "
+ "apellidos, "
+ "telefono) "
+ "VALUES ("
+ "'"+nombres[i]+
"','"+apellidos[i]+
"','"+telefonos[i]+
"' )");
}
System.out.println("-Añadir registros a la tabla - Ok");

// Consulta de datos
System.out.println("-Consultar registros:");
ResultSet rs = st.executeQuery ("select * from contacto");
while (rs.next()) {
System.out.println (
rs.getString (1) + " " +
rs.getString (2) + " " +
rs.getString (3) + " " +
rs.getString (4)
);
}

// Borrar tabla
st.executeUpdate("DROP TABLE contacto");
System.out.println("-Borrar tabla contacto - Ok");

conn.close();// Cerrar base de datos
System.out.println("-Cerrar base de datos " + url + " - Ok");
}
} catch(SQLException ex) { System.out.println(ex); }
}
}
Resultado:

run:
-Abierta base de datos jdbc:mysql://localhost:3306/mi_base - Ok
-Creada tabla (contacto) - Ok
-Añadir registros a la tabla - Ok
-Consultar registros:
1 Juan Sanchez 918971234
2 Maria Jimenez 918984621
3 Antonio Moreno 935741254
-Borrar tabla contacto - Ok
-Cerrar base de datos jdbc:mysql://localhost:3306/mi_base - Ok
BUILD SUCCESSFUL (total time: 1 second)

Nota: Para ejecutar comandos MySql desde codigo java hemos utilizado la sentencia executeUpdate y para consultas se utiliza executeQuery.

Con la tecnología de Blogger.