andres marín l. amarin@udea.edu.co programación sockets en java
Post on 03-Feb-2016
224 Views
Preview:
TRANSCRIPT
Andres Marín L.amarin@udea.edu.co
Programación sockets en java
Las aplicaciones en Internet usan el modelo cliente servidor.
Introducción
Arquitectura TCP/IP
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
Tramas UDP y TCP
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
Un cliente solicita conexiones a un servidor mediante un puertopuerto predeterminado.
Cliente
A es un Cliente Web / B es un Servidor Web
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
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?
• 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?
• 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
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
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
Programa de ejemplo
Programa de ejemplo
• 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
• Intercambio de información.socket.send(packet);
socket.receive(packet);
Esquema del cliente. Continuación
Programa de ejemplo
Programa de ejemplo
• 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
• 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
• 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
Programa de ejemplo
• 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
• 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
Programa de ejemplo
top related