Introducción a las comunicaciones

Anuncio
Comunicacion en Java
Alejandro Escobar
Introducción a las comunicaciones
Modelo básico de red
Imagen tomada de: http://java.sun.com/docs/books/tutorial/networking/overview/networking.html
Normalmente programamos sobre la capa de aplicación, es decir creamos
aplicaciones que utilizan algún medio de transporte
Introducción a las comunicaciones
El paquete java.net nos brinda las clases necesarias para la realización de aplicaciones.
Solo se hace necesario comprender los conceptos de transporte (UDP y TCP).
TCP (Transmission Control
Protocol)
UDP (User Datagram Protocol)
Se establece la conexión y se
envian los datos.
No se establece la conexión, se
envian datagramas de una
aplicación a otra
Protocolo basado en la
conexión, se garantiza el envio y
recepción de los datos
No se garantiza la recepción de
los paquetes enviados.
Introducción a las comunicaciones
Un computador generalmente tiene una conexión física de red, esto nos
lleva a preguntarnos, ¿Cómo sabe el computador a que programa le están
enviando datos? La respuesta es el concepto de puerto
Diferentes servicios, cada
servicio esta asociado a un
puerto
ftp 21/tcp
telnet 23/tcp
smtp 25/tcp mail
http 80/tcp
Dirección IP
Introducción a las comunicaciones
En una comunicación establecida por TCP, el recurso que actua como
Server mapea un socket con un puerto para establecer la comunicación.
Los protocolos TCP y UDP usa un mapeo de puertos para un proceso o
programa en particular que se este ejecutando en el computador (Server)
Imagen tomada de: http://java.sun.com/docs/books/tutorial/networking/overview/networking.html
Introducción a las comunicaciones
El rango de puertos disponibles va de 0 a 65,535, se ha reservado un rango
como puertos restringidos de 0 a 1023.
Mapeo de puertos Vs aplicaciones:
Imagen tomada de: http://java.sun.com/docs/books/tutorial/networking/overview/networking.html
Sockets - Clases TCP
TCP proporciona el protocolo necesario para establecer un canal de
comunicación en aplicaciones tipo Cliente / Servidor
Un socket es un punto final de comunicación de doble via bidireccional
entre dos programas que se ejecutan en la red. Un socket está mapeado a
un número de puerto para que la capa TCP pueda identificar la aplicación
que está destinada a recolectar los datos para ser enviados.
Proceso de comunicación
1. El cliente conoce con que server quiere
comunicarse
2. El cliente solicita una conexión con el
server, estableciendo la dirección IP del
server y el puerto de comunicaciones.
3. Si todo esta bien, el server acepta la
conexión con el cliente creando un
socket entre los ambos.
Proceso de comunicación
1
• Creación, establecer
comunicación y apertura
2
• Lectura, escritura, recepción y
envio de datos.
3
• Cierre y destrucción de la
conexión
Ejemplo de un cliente
1
• Socket echoSocket = new Socket(“nombremaquina", 7);
• out = new PrintWriter(echoSocket.getOutputStream(), true);
• in = new BufferedReader(new InputStreamReader(
echoSocket.getInputStream()));
2
• while ((userInput = stdIn.readLine()) != null) {
• out.println(userInput);
• System.out.println("echo: " + in.readLine());
•}
3
• out.close();
• in.close();
• stdIn.close();
• echoSocket.close();
Ejemplo tomado de http://java.sun.com/docs/books/tutorial/networking/sockets/readingWriting.html
Ejemplo de un Server
1
2
3
•ServerSocket serverSocket = new ServerSocket(4444);
•Socket clientSocket = serverSocket.accept();
•PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
•
BufferedReader in = new BufferedReader( new InputStreamReader(
clientSocket.getInputStream()));
•
•
•
•
•
•
while ((inputLine = in.readLine()) != null) {
outputLine = kkp.processInput(inputLine);
out.println(outputLine);
if (outputLine.equals("Bye."))
break;
}
•
•
•
•
out.close();
in.close();
clientSocket.close();
serverSocket.close();
Ejemplo tomado de http://java.sun.com/docs/books/tutorial/networking/sockets/readingWriting.html
En general
Descargar