introducción al api sockets con java andrés marín l. [email protected] junio de 2011 universidad...
TRANSCRIPT
![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](https://reader033.vdocuments.pub/reader033/viewer/2022042814/551ce2a2550346447a8b4c39/html5/thumbnails/1.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022042814/551ce2a2550346447a8b4c39/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022042814/551ce2a2550346447a8b4c39/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022042814/551ce2a2550346447a8b4c39/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022042814/551ce2a2550346447a8b4c39/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022042814/551ce2a2550346447a8b4c39/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022042814/551ce2a2550346447a8b4c39/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022042814/551ce2a2550346447a8b4c39/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022042814/551ce2a2550346447a8b4c39/html5/thumbnails/9.jpg)
![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](https://reader033.vdocuments.pub/reader033/viewer/2022042814/551ce2a2550346447a8b4c39/html5/thumbnails/10.jpg)
![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](https://reader033.vdocuments.pub/reader033/viewer/2022042814/551ce2a2550346447a8b4c39/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022042814/551ce2a2550346447a8b4c39/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022042814/551ce2a2550346447a8b4c39/html5/thumbnails/13.jpg)
![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](https://reader033.vdocuments.pub/reader033/viewer/2022042814/551ce2a2550346447a8b4c39/html5/thumbnails/14.jpg)
![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](https://reader033.vdocuments.pub/reader033/viewer/2022042814/551ce2a2550346447a8b4c39/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022042814/551ce2a2550346447a8b4c39/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022042814/551ce2a2550346447a8b4c39/html5/thumbnails/17.jpg)
• 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](https://reader033.vdocuments.pub/reader033/viewer/2022042814/551ce2a2550346447a8b4c39/html5/thumbnails/18.jpg)
![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](https://reader033.vdocuments.pub/reader033/viewer/2022042814/551ce2a2550346447a8b4c39/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022042814/551ce2a2550346447a8b4c39/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.pub/reader033/viewer/2022042814/551ce2a2550346447a8b4c39/html5/thumbnails/21.jpg)
![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](https://reader033.vdocuments.pub/reader033/viewer/2022042814/551ce2a2550346447a8b4c39/html5/thumbnails/22.jpg)
• 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.