1.1.1. La clase Servidor TCP/IP
Veamos el código que presentamos en el siguiente ejemplo, donde desarrollamos un mínimo servidor TCP/IP, para el cual desarrollaremos después su contrapartida cliente TCP/IP. La aplicación servidor TCP/IP depende de una clase de comunicaciones proporcionada por Java: ServerSocket. Esta clase realiza la mayor parte del trabajo de crear un servidor.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Servidor {
public static void main(String [] args) {
ServerSocket s; //Socket servidor
Socket sc; //Socket cliente
PrintStream p; //Canal de escritura
BufferedReader b; //Canal de Lectura
String mensaje;
try {
//Creo el socket server
s = new ServerSocket (9999);
//Invoco el metodo accept del socket servidor, me devuelve una referencia al socket cliente
sc = s.accept();
//Obtengo una referencia a los canales de escritura y lectura del socket cliente
b = new BufferedReader ( new InputStreamReader ( sc.getInputStream() ) );
p = new PrintStream ( sc.getOutputStream() );
while ( true ) {
//Leo lo que escribio el socket cliente en el canal de lectura
mensaje = b.readLine();
System .out.println(mensaje);
//Escribo en canal de escritura el mismo mensaje recibido
p.println(mensaje);
if ( mensaje.equals("by")) {
break;
}
}
p.close();
b.close();
sc.close();
s.close();
} catch (IOException e) {
System .out.println("No puedo crear el socket");
}
}
}
1.1.2. La clase Cliente TCP/IP
El lado cliente de una aplicación TCP/IP descansa en la clase Socket. De nuevo, mucho del trabajo necesario para establecer la conexión lo ha realizado la clase Socket. Vamos a presentar ahora el código de nuestro cliente más simple, que encaja con el servidor presentado antes. El trabajo que realiza este cliente es que todo lo que recibe del servidor lo imprime por la salida estándar del sistema.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;
public class Cliente {
public static void main(String [] args) {
Socket s;
PrintStream p;
BufferedReader b;
String host = "localhost";
int port = 9999;
String respuesta;
//Referencia a la entrada por consola (System.in)
BufferedReader in = new BufferedReader (new InputStreamReader (System .in));
try {
//Creo una conexion al socket servidor
s = new Socket (host,port);
//Creo las referencias al canal de escritura y lectura del socket
p = new PrintStream (s.getOutputStream());
b = new BufferedReader ( new InputStreamReader ( s.getInputStream() ) );
while ( true ) {
//Ingreso un String por consola
System .out.print("Mensaje a enviar: ");
//Escribo en el canal de escritura del socket
p.println( in.readLine() );
//Espero la respuesta por el canal de lectura
respuesta = b.readLine();
System .out.println(respuesta);
if ( respuesta.equals("by")) {
break;
}
}
p.close();
b.close();
s.close();
} catch (UnknownHostException e) {
System .out.println("No puedo conectarme a " + host + ":" + port);
} catch (IOException e) {
System .out.println("Error de E/S en " + host + ":" + port);
}
}
}
10/10
ResponderEliminarEste comentario ha sido eliminado por un administrador del blog.
ResponderEliminar