Introducción al API sockets con java Andrés Marín L. [email protected] Junio de 2011 Universidad...

22
Introducción al API sockets con java Andrés Marín L. [email protected] Junio de 2011 Universidad de Antioquia Ingeniería de Sistemas

Transcript of Introducción al API sockets con java Andrés Marín L. [email protected] Junio de 2011 Universidad...

Page 1: Introducción al API sockets con java Andrés Marín L. amarin@udea.edu.co Junio de 2011 Universidad de Antioquia Ingeniería de Sistemas.

Introducción al API sockets con javaAndrés Marín L.

[email protected] de 2011

Universidad de AntioquiaIngeniería de Sistemas

Page 2: Introducción al API sockets con java Andrés Marín L. amarin@udea.edu.co Junio de 2011 Universidad de Antioquia Ingeniería de Sistemas.

Qué es un API

• API significa: Aplication Program Interface

• Sockets: Es el API por excelencia para el desarrollo de aplicaciones bajo la arquitectura TCP/IP

• Sockets fueron inventados en Berkeley bajo el Unix BSD que combinados con Internet, se extendieron rápidamente a nivel mundial.

Page 3: Introducción al API sockets con java Andrés Marín L. amarin@udea.edu.co Junio de 2011 Universidad de Antioquia Ingeniería de Sistemas.

Qué es un socket?

• Un socket es una “manija” a través de la cual hacemos referencia a una instancia de comunicaciones.

• Siempre que necesitemos enviar o recibir datos lo haremos mediante un socket.

• El API socket provee una serie de llamadas al sistema que permiten asociar un socket a una conexión.

Page 4: Introducción al API sockets con java Andrés Marín L. amarin@udea.edu.co Junio de 2011 Universidad de Antioquia Ingeniería de Sistemas.

Qué tipos de aplicaciones se pueden hacer con el API socket?

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

Page 5: Introducción al API sockets con java Andrés Marín L. amarin@udea.edu.co Junio de 2011 Universidad de Antioquia Ingeniería de Sistemas.

Aspectos generales

• La filosofía de las aplicaciones bajo tcp/ip es el trabajo Cliente-Servidor.

• Usualmente el servidor es un proceso que esta “escuchando” un puerto, mediante un socket, esperando los requerimientos de los clientes.

• Un cliente es un proceso que envía requerimientos a un puerto de un servidor conectado en una red basada en TCP/IP

Page 6: Introducción al API sockets con java Andrés Marín L. amarin@udea.edu.co Junio de 2011 Universidad de Antioquia Ingeniería de Sistemas.

Aplicaciones UDP

• 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.*;

Page 7: Introducción al API sockets con java Andrés Marín L. amarin@udea.edu.co Junio de 2011 Universidad de Antioquia Ingeniería de Sistemas.

Esquema del servidor

• Declarar un socketDatagramSocket socket;

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

static final int serverPort = 6666;

socket = new DatagramSocket(serverPort);

Page 8: Introducción al API sockets con java Andrés Marín L. amarin@udea.edu.co Junio de 2011 Universidad de Antioquia Ingeniería de Sistemas.

Esquema del servidor

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

DatagramPacket packet;

packet = new DatagramPacket(data,packetSize);

• Loop esperando y leyendo datos.for(;;){

socket.receive(packet);

…. Otras acciones dependiendo del servicio

Page 9: Introducción al API sockets con java Andrés Marín L. amarin@udea.edu.co Junio de 2011 Universidad de Antioquia Ingeniería de Sistemas.
Page 10: Introducción al API sockets con java Andrés Marín L. amarin@udea.edu.co Junio de 2011 Universidad de Antioquia Ingeniería de Sistemas.
Page 11: Introducción al API sockets con java Andrés Marín L. amarin@udea.edu.co Junio de 2011 Universidad de Antioquia Ingeniería de Sistemas.

Esquema del cliente

• 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);

Page 12: Introducción al API sockets con java Andrés Marín L. amarin@udea.edu.co Junio de 2011 Universidad de Antioquia Ingeniería de Sistemas.

Esquema del cliente

• Intercambio de información.

socket.send(packet);

socket.receive(packet);

Page 13: Introducción al API sockets con java Andrés Marín L. amarin@udea.edu.co Junio de 2011 Universidad de Antioquia Ingeniería de Sistemas.
Page 14: Introducción al API sockets con java Andrés Marín L. amarin@udea.edu.co Junio de 2011 Universidad de Antioquia Ingeniería de Sistemas.
Page 15: Introducción al API sockets con java Andrés Marín L. amarin@udea.edu.co Junio de 2011 Universidad de Antioquia Ingeniería de Sistemas.

Aplicaciones TCP

• 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.*;

Page 16: Introducción al API sockets con java Andrés Marín L. amarin@udea.edu.co Junio de 2011 Universidad de Antioquia Ingeniería de Sistemas.

Esquema del servidor

• Declaramos un socket servidor y lo asociamos a un puerto

ServerSocket serverSocket = null;

serverSocket = new ServerSocket(4444);

• Esperamos a un cliente que se desee conectar con el servidor

Socket clientSocket = null;

clientSocket = serverSocket.accept();

Page 17: Introducción al API sockets con java Andrés Marín L. amarin@udea.edu.co Junio de 2011 Universidad de Antioquia Ingeniería de Sistemas.

• 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 canal

PrintWriter 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) You said: " + linea);

Page 18: Introducción al API sockets con java Andrés Marín L. amarin@udea.edu.co Junio de 2011 Universidad de Antioquia Ingeniería de Sistemas.
Page 19: Introducción al API sockets con java Andrés Marín L. amarin@udea.edu.co Junio de 2011 Universidad de Antioquia Ingeniería de Sistemas.

Esquema del cliente

• 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 de InetAddress getLocalHost, getByAddress, getByName, etc

InetAddress direccion;

direccion = InetAddress.getLocalHost();

echoSocket = new Socket(direccion, 4444);

Page 20: Introducción al API sockets con java Andrés Marín L. amarin@udea.edu.co Junio de 2011 Universidad de Antioquia Ingeniería de Sistemas.

Esquema del cliente

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

entradaPrintWriter 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)

Page 21: Introducción al API sockets con java Andrés Marín L. amarin@udea.edu.co Junio de 2011 Universidad de Antioquia Ingeniería de Sistemas.
Page 22: Introducción al API sockets con java Andrés Marín L. amarin@udea.edu.co Junio de 2011 Universidad de Antioquia Ingeniería de Sistemas.

• Cierre de la conexiónsalida.close();

entrada.close();

stdIn.close();

echoSocket.close();

• Es posible atender a varios clientes desde un mismo servidor mediante el uso de hilos.