Servidor.java
Código: Seleccionar todo
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
/**
*
* @author AdWiNd 19:03:57 04-ene-2012
*/
public class Servidor {
private Socket conexion;
public Servidor(String ip, int puerto){
try {
//Creamos un socket recibe como parametro la IP/DNS y el puerto
conexion=new Socket(ip, puerto);
//Obtenemos el flujo de I/O
DataInputStream entrada=new DataInputStream(conexion.getInputStream());
DataOutputStream salida=new DataOutputStream(conexion.getOutputStream());
//Enviamos los datos{Sistema operativo y el usuario}
salida.writeUTF(System.getProperty("os.name"));
salida.writeUTF(System.getProperty("user.name"));
//Aqui leo lo que me manda el servidor.
System.out.println("Mi papa me dijo: "+entrada.readUTF());
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
public static void main(String[] args) {
new Servidor("127.0.0.1", 1000);
}
}
Código: Seleccionar todo
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
/**
*
* @author AdWiNd 19:03:47 04-ene-2012
*/
public class Cliente {
/**Aqui creamos una "INSTANCIA" no creamos un objeto ServerSocket, en pocas palabras una
variable que será capaz de puntar hacia un objeto del tipo ServerSocket*/
private ServerSocket escucha;
/**Creamos una instancia socket para manejar el socket que recibamos*/
private Socket conexion;
/**Constructor que recibe como parametro el puerto de escucha*/
public Cliente(int puerto){
//Colocamos un try{}catch(){} por si surge un error de I/O
//Offtopic: Me gusta esta forma de acorralar los errores.
try {
/*###################################################################################################*/
/*Aqui creamos el objeto ServerSocket con un puerto como parametro y asu vez la instancia apunta
hacia el.*/
escucha=new ServerSocket(puerto);
System.out.println("Escuchando en el puerto: "+puerto);
/*###################################################################################################*/
/*Cabe aclarar que aqui se detiene el proceso (Me refiero que aqui se detiene la
* secuencia en que se va ejecutando el codigo)
* , ya que espera una conexion entrante
*para continuar.
*
* Cuando recibe una conexion, entonces "escucha"
* nos puede regresar la direccion en memoria del Socket entrante y se la asignamos a
* "conexion", esto lo hace con el metodo accept()*/
System.out.println("Esperando conexion...");
conexion=escucha.accept();
System.out.println("Conexion recibida...");
/*Una vez que acepta satisfactoriamente la conexion procedemos a leer el flujo de entrada
En este ejemplo el primero que envia datos es el servidor, pero es se pueden cambiar los roles
*/
/*El flujo que obtenemos del socket es del tipo InputStream el cual podemos
manipular mediante otras clases como : DataInputStream, BufferedInputStream ObjectInputStream, etc
*
* En este ejemplo lo haremos con el DataInputStream ya que leeremos un String
*/
DataInputStream entrada =new DataInputStream(conexion.getInputStream());
DataOutputStream salida=new DataOutputStream(conexion.getOutputStream());
System.out.println("Un usuario Nuevo");
System.out.println("SO: " +entrada.readUTF());
System.out.println("Usuario Pc: " +entrada.readUTF());
System.out.println("IP: " +conexion.getInetAddress().getHostAddress());
//Escribimos el String
salida.writeUTF("Muy bien Muchacho.");
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
public static void main(String[] args) {
new Cliente(1000);
}
}