Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Socket

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 6

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO

Departamento Acadmico de Informtica


REDES Y TELECOMUNICACIONES 2

Lab 03: Sockets, Hilos y Excepciones (TCP)


Ing Manuel Pealoza Figueroa
Dime y lo olvidar. Mustrame y lo recordar. Involcrame y lo entender
Proverbio chino

1.

OBJETIVOS:
1.1
1.2
1.3
1.4

2.

Entender lo bsico de la comunicacin por redes.


Programar aplicaciones de red usando sockets.
Aprender como construir aplicaciones cliente/servidor que se comunican usando
sockets
Aprender el uso de hilos y excepciones en Java.

BASE TEORICA COMPLENTARIA


Socket: Una interface creada por la aplicacin del host local y controlada por el SO, en
el cual el proceso aplicacin puede tanto enviar como recibir mensajes a desde otro
proceso aplicacin.

3.

RECURSOS
Los recursos a utilizar en el trabajo de laboratorio son:
3.1 Java

4.

DESARROLLO DE LA PRACTICA:
En el presente trabajo de laboratorio se implementar en TCP el servicio ECO, es decir
tanto un cliente que enva datos a un servidor, como un servidor que recibe datos desde
un cliente y lo devuelve de regreso (hace un ECO) al cliente, haciendo uso del lenguaje
Java.
4.1 Escribir una aplicacin cliente/servidor que implemente un servicio ECO, que
pueda atender mltiples peticiones.

1 - Leunam

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO


REDES Y TELECOMUNICACIONES 2

Lab 03: Sockets, Hilos y Excepciones (TCP)


APLICACIN SERVIDOR:
EchoServerMC.java
/*
* Multi-Server ==> mltiples Clientes
*
*/
import java.net.*;
import java.io.*;
public class EchoServerMC {
public static void main(String[] args) throws IOException {
ServerSocket socketServidor = null;
boolean enEscucha = true;
try {
// Crear un nuevo objeto socketServidor para escuchar en un puerto
// especfico.
// (cuando escribiendo un server, elegir un puerto que no este ya
// dedicado a algn otro servicio).
socketServidor = new ServerSocket(7777);
} catch (IOException e) {
// El constructor p' ServerSocket lanza una excepcin si no puede escuchar en
// el puerto especificado (por ejemplo: el puerto ya esta siendo usado)
System.err.println("El server no puede escuchar en puerto: 7777.");
System.exit(1);
}
// Si el server exitosamente se liga a su puerto, entonces el objeto ServerSocket
// es con exito creado y el server continua al siguiente paso
while (enEscucha) {
System.out.println("Esperando por clientes a conectarse:");
// crear hilo
// (el mtodo accept retorna un nuevo objeto Socket dentro del hilo, para
// manejar la interaccion server-cliente, aceptando una conexion desde un
// cliente)
new MultiServerThread(socketServidor.accept()).start();
System.out.println("Cliente conectado al server");
}
socketServidor.close();
}
}

2 - Leunam

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO


REDES Y TELECOMUNICACIONES 2

Lab 03: Sockets, Hilos y Excepciones (TCP)


MultiServerThread.java
/*
*
*
*/
import java.net.*;
import java.io.*;
public class MultiServerThread extends Thread {
private Socket socket = null;
// constructor: parametro(s): tipo Socket
public MultiServerThread(Socket socket) {
// llamar a un constructor de la superclase
// super("MultiServerThread");
this.socket = socket;
}
public void run() {
try {
//
// crear streams de entrada y salida ligados al socket
BufferedReader in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
String inputLine, outputLine;
//
while ((inputLine = in.readLine()) != null) {
System.out.println("Recibido: " + inputLine + " : ");
// cargo lo leido en el String de salida y lo imprimo (escribo al socket del
// servidor) para enviarlo de regreso al cliente
outputLine = inputLine;
out.println(outputLine);
}
out.close();
in.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3 - Leunam

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO


REDES Y TELECOMUNICACIONES 2

Lab 03: Sockets, Hilos y Excepciones (TCP)


APLICACIN CLIENTE:
EchoCliente.java
/* Ejemplo: EchoCliente
* Se usa readers y writers, asi que se puede escribir caracteres Unicode sobre el
*
socket.
* Para enviar data a travs del socket al servidor, EchoCliente simplemente necesita
*
escribir al PrintWriter.
* Para obtener la respuesta del server, EchoCliente lee desde el BufferedReader.
*/
import java.io.*;
import java.net.*;
public class EchoCliente {
public static void main(String[] args) throws IOException {
Socket socketCliente = null;
PrintWriter out = null;
BufferedReader in = null;
try {
// crear nuevo objeto Socket (llamado socketCliente)
// el constructor Socket requiere el nombre de la mquina y el # de puerto al cual
//
se desea conectar.
// el 2do argumento es el # de puerto (el puerto # 7 es el puerto en el cual
// el servidor Echo escuchara comnmente)
socketCliente = new Socket("id_Servidor", 7777);
// crear stream de salida para escribir bytes al socket y crear un PrintWriter
// sobre el.
out = new PrintWriter(socketCliente.getOutputStream(), true);
// crear un stream de entrada para leer bytes desde el socket, crear
// un InputStreamReader que usa el juego de caracteres por defecto y crear
// un BufferedReader sobre el.
// (por eficiencia, se envuelve un InputStreamReader dentro de un
// BufferedReader).
in = new
BufferedReader(new InputStreamReader(socketCliente.getInputStream()));
} catch (UnknownHostException e) {
System.err.println("No existe host: Servidor " + "id_Servidor");
System.exit(1);
} catch (IOException e) {
System.err.println(" No se pudo obtener I/O para "
+ "la conexin a: id_Servidor");
4 - Leunam

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO


REDES Y TELECOMUNICACIONES 2

Lab 03: Sockets, Hilos y Excepciones (TCP)


System.exit(1);
}
BufferedReader entradaStd = new
BufferedReader(new InputStreamReader(System.in));
// El lazo lee una lnea a la vez desde el stream de entrada estndar
// (tipear ctrl-z (Windows) or ctrl-d (unix) cuando se ha finalizado enviar
//
mensajes al EchoServer)
String entradaUsuario;
while ((entradaUsuario = entradaStd.readLine()) != null) {
// enviar la lnea al server (escribir al PrintWriter conectado al socket).
out.println(entradaUsuario);
// Leer una lnea de informacin desde el BufferedReader conectado al socket.
// (el mtodo readLine espera hasta que el server hace eco de la informacin de
// regreso al EchoCliente), cuando readline retorna, EchoCliente imprime la
// informacin a la salida estandar.
System.out.println("echo: " + in.readLine());
}
// cerrar los readers y writers conectados al socket y al stream de entrada
// estandar, y cerrar la conexin socket al server.
// (el orden es importante, se debe cerrar cualquier stream conectado a un socket
// antes de cerrar el socket mismo).
out.close();
in.close();
entradaStd.close();
socketCliente.close();
}
}

4.2 Agregar cdigo que muestre tanto en la aplicacin cliente como en la aplicacin
servidor la informacin respecto a la conexin TCP, es decir que en cada
extremo se debe visualizar la informacin del socket cliente y la del socket
servidor en conjunto (es decir la informacin de la conexin).
4.3 Agregar cdigo en la aplicacin servidor que muestre en que hilos son atendidos
los diferentes los clientes.
4.4 En Windows abrir 3 ms ventanas DOS, e ir a cada directorio donde se
encuentra el programa fuente (para el caso de los clientes el programa fuente ser
el mismo).

5 - Leunam

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO


REDES Y TELECOMUNICACIONES 2

Lab 03: Sockets, Hilos y Excepciones (TCP)


- Si necesario, en todas las ventanas, establecer la ruta al compilador y al
intrprete de Java

SET PATH=%PATH%;C:\Archivos de programa\Java\jdk1.6.0\bin

SET PATH=%PATH%;C:\Archivos de programa\Java\jdk1.6.0_17\bin


(el directorio exacto vara segn que versin de Java est instalado)
- En cada ventana, compilar el correspondiente archivo de Java

javac MultiServerThread.java
javac EchoServerMC.java
javac EchoCliente.java
- En la ventana del servidor ejecutar la aplicacin servidor

java EchoServerMC
- En la ventana de los clientes ejecutar las aplicaciones cliente.

java EchoCliente

5. CONTROL:
TRABAJOS DE LABORATORIO.
5.1

La asistencia al laboratorio se considera como tal si se cumple con lo solicitado en


4.2, 4.3 y 4.4.

6 - Leunam

También podría gustarte