27
Andres Marín L. [email protected] Programación sockets en java

Andres Marín L. [email protected] Programación sockets en java

Embed Size (px)

Citation preview

Page 1: Andres Marín L. amarin@udea.edu.co Programación sockets en java

Andres Marín [email protected]

Programación sockets en java

Page 2: Andres Marín L. amarin@udea.edu.co Programación sockets en java

Las aplicaciones en Internet usan el modelo cliente servidor.

Introducción

Page 3: Andres Marín L. amarin@udea.edu.co Programación sockets en java

Arquitectura TCP/IP

Page 4: Andres Marín L. amarin@udea.edu.co Programación sockets en java

El nivel de aplicación se soporta sobre el nivel de transporte para usar la red.El mecanismo de puertos del nivel de transporte permite diferenciar cualquier comunicación entre cualquier par de computadores.El desarrollador decide si le conviene más TCP o UDP para su desarrollo.

Cliente Servidor

Page 5: Andres Marín L. amarin@udea.edu.co Programación sockets en java

Tramas UDP y TCP

Page 6: Andres Marín L. amarin@udea.edu.co Programación sockets en java

Un servidor es un programa que normalmente se queda corriendo indefinidamente pendiente de atender las solicitudes de los clientes. (Demonio o Servicio)El servidor se asociaasocia a un puerto específico que será usado por el cliente para contactarlo.

Servicio Puerto

Web-http 80/TCP

email-smtp 25/TCP

SSH 22/TCP

DNS 53/UDP

Servidor

Page 7: Andres Marín L. amarin@udea.edu.co Programación sockets en java

Un cliente solicita conexiones a un servidor mediante un puertopuerto predeterminado.

Cliente

Page 8: Andres Marín L. amarin@udea.edu.co Programación sockets en java

A es un Cliente Web / B es un Servidor Web

Page 9: Andres Marín L. amarin@udea.edu.co Programación sockets en java

Es un API (application program interface) para el desarrollo de programas de comunicaciones sobre TCP/IP ó Unix.

Originalmente se creó para Unix y Lenguaje C pero hoy en día se puede usar desde muchos lenguajes de programación sobre cualquier sistema operativo.

Sockets

Page 10: Andres Marín L. amarin@udea.edu.co Programación sockets en java

Que es un socket?

Desde el punto de vista de programación, un socket nos da la “manija” con la cual podemos hacer uso de un extremo de la comunicación ya sea en el rol de cliente o de servidor.

Es análogo a un descriptor de un archivo cuando hacemos uso de operaciones de I/O.

Un socket permite identificar con quien estamos comunicándonos

Qué es un socket?

Page 11: Andres Marín L. amarin@udea.edu.co Programación sockets en java

• Se pueden desarrollar aplicaciones que usen los protocolos TCP, UDP e IP. Igualmente se puede trabajar directamente sobre la interface de red.

Qué tipos de aplicaciones se pueden desarrollar con el API sockets?

Page 12: Andres Marín L. amarin@udea.edu.co Programación sockets en java

• El protocolo UDP es no orientado a conexión, por lo tanto, no se requiere hacer un procedimiento especial de conexión o cierre de la misma.

• Se requiere importar estas librerías:

import java.net.*;

import java.io.*;

Aplicaciones UDP

Page 13: Andres Marín L. amarin@udea.edu.co Programación sockets en java

1. Declarar un socketDatagramSocket socket;

2. Definir el puerto por el que se reciben las conexiones y asociar el socket.

static final int serverPort = 6666;

socket = new DatagramSocket(serverPort);

Esquema de un servidor UDP

Page 14: Andres Marín L. amarin@udea.edu.co Programación sockets en java

3. Definir un buffer de recepción de paquetes (datagramas UDP)

DatagramPacket packet;

packet = new DatagramPacket(data,packetSize);

4. Loop infinito esperando y leyendo datos.for(;;){

socket.receive(packet);

…. Otras acciones dependiendo del servicio

Esquema de un servidor en UDP. Continuación

Page 15: Andres Marín L. amarin@udea.edu.co Programación sockets en java

Programa de ejemplo

Page 16: Andres Marín L. amarin@udea.edu.co Programación sockets en java

Programa de ejemplo

Page 17: Andres Marín L. amarin@udea.edu.co Programación sockets en java

• Definir un buffer de envio de paquetes (datagramas UDP) y asociarlo a un puerto

DatagramPacket packet;

packet = new

DatagramPacket(data,data.length,address,serverPort);

• Preparando la información.data = new byte[packetSize];

messageSend = new String(args[1]);

messageSend.getBytes(0,messageSend.length(),data,0);

Esquema del cliente

Page 18: Andres Marín L. amarin@udea.edu.co Programación sockets en java

• Intercambio de información.socket.send(packet);

socket.receive(packet);

Esquema del cliente. Continuación

Page 19: Andres Marín L. amarin@udea.edu.co Programación sockets en java

Programa de ejemplo

Page 20: Andres Marín L. amarin@udea.edu.co Programación sockets en java

Programa de ejemplo

Page 21: Andres Marín L. amarin@udea.edu.co Programación sockets en java

• El protocolo TCP es orientado a conexión, por lo tanto, se requiere hacer un procedimiento especial de conexión y cierre de la misma.

• Se requiere importar estas librerías:import java.net.*;

import java.io.*;

Aplicaciones con TCP

Page 22: Andres Marín L. amarin@udea.edu.co Programación sockets en java

• Declaramos un socket servidor y lo asociamos a un puerto

ServerSocket serverSocket = null;

serverSocket = new ServerSocket(4444);

• Declaramos un socket cliente donde esperamos a un cliente que se desee conectar con el servidor

Socket clientSocket = null;

clientSocket = serverSocket.accept();

Esquema del Servidor

Page 23: Andres Marín L. amarin@udea.edu.co Programación sockets en java

• Intercambio de información– Declaración de un buffer de lectura del canal

BufferedReader entrada = new BufferedReader(

new InputStreamReader(clientSocket.getInputStream()));

– Declaracción de un buffer de escritura sobre el canalPrintWriter salida =

new PrintWriter(clientSocket.getOutputStream(), true);

– Escribir al canalString linea = "Dialogue client/server";

salida.println(linea);

– Leer del canalwhile ((linea = entrada.readLine()) != null)

salida.println("(Server) Usted dijo: " + linea);

Esquema del Servidor. Continuación

Page 24: Andres Marín L. amarin@udea.edu.co Programación sockets en java

Programa de ejemplo

Page 25: Andres Marín L. amarin@udea.edu.co Programación sockets en java

• Declaramos un socket que usará el cliente para la conexión

Socket echoSocket = null;

• Asociamos el socket a un puerto y dirección ip remota del servidor. Puede ser necesario convertir un nombre de maquina a dirección IP. Consultar métodos: InetAddress, getLocalHost, getByAddress, getByName, etc

InetAddress direccion;

direccion = InetAddress.getLocalHost();

echoSocket = new Socket(direccion, 4444);

Esquema del Cliente

Page 26: Andres Marín L. amarin@udea.edu.co Programación sockets en java

• Intercambio de información– Declaramos un buffer de salida y otro de entrada

PrintWriter salida = null;BufferedReader entrada = null;salida = new

PrintWriter(echoSocket.getOutputStream(), true);

entrada = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));

– Se hacen lecturasfromServer = entrada.readLine()

– Se hacen escriturassalida.println(fromUser)

Esquema del Cliente. Continuación

Page 27: Andres Marín L. amarin@udea.edu.co Programación sockets en java

Programa de ejemplo