Está en la página 1de 20

/Desarrollo de

applets/aplicaciones
con uso de base de
datos, redes,
servlets y multimedia
Codificar aplicaciones en Java usando
las clases de manejo de Redes
FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje
2 Tabla de Contenido
1. Introducción al Recurso Educativo Virtual........................................................ 3
2. Mapa conceptual ............................................................................................. 4
3. Desarrollo de contenidos.................................................................................. 5
3.1. Redes en Java.............................................................................................. 5
3.1.1. Introducción a redes de computadores...................................................... 5
3.1.2. TCP – Transmission Control Protocol........................................................ 5
3.1.3. UDP – “User Datagram Protocol” .............................................................. 5
3.1.4. Puertos....................................................................................................... 5
3.1.5. Direccion Ip ............................................................................................... 6
3.1.5.1. Aplicaciones cliente/servidor................................................................... 6
3.1.6. Clases para manejo de redes en java........................................................ 6
3.1.6.1. La clase InnetAddress............................................................................. 6
3.1.6.2. La Clase Socket ..................................................................................... 9
3.1.6.3. La clase ServerSocket............................................................................ 9
3.1.6.3.1 Constructores ..................................................................................... 10
3.1.6.3.2 Métodos importantes .......................................................................... 10
3.1.6.3.3. Ejemplo conexión básica cliente/servidor usando Sockets ............... 10
3.1.6.4. Clase ServidorSocket.java.................................................................... 11
3.1.7. Ejemplo conexión cliente/servidor enviando información......................... 13
4. Material anexo al tema .................................................................................. 17
5. Glosario ......................................................................................................... 18
6. Referencias bibliográficas ............................................................................. 19
Créditos.............................................................................................................. 20
Creative Commons ............................................................................................ 20

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


3

1. Introducción

En este Resultado de Aprendizaje aprenderá


en primer lugar, algunos conceptos básicos de
redes de computadores para luego abordar las
clases comunes para el desarrollo de aplicaciones
en Java que hacen parte del paquete java.net.

Se desarrollará un ejemplo de cómo


trabajar la clase InnetAdress para obtener la IP del
equipo local y del servidor que aloja la página de
SENASOFIAPLUS. Finalmente se explicarán los
conceptos básicos de creación de una aplicación
cliente / servidor en Java usando las clases
Socket y ServerSocket. De esta forma, tendrá
los conocimientos suficientes para realizar las
actividades planteadas en la guía de aprendizaje
de la presente unidad, y alcanzar el resultado
de aprendizaje Conocer y aplicar los elementos
del trabajo con redes en la construcción de
aplicaciones.

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


4
2. Mapa conceptual

REDES EN JAVA
usa

Protocolos Puerto Dirección IP Clases en Java

como que es que es como

InetAdress
interfaz virtual Número de 32 bits
Socket
TCP UDP
para
ServerSocket
ventaja ventaja

Identificar equipo
Conexión confiable Conexión rápida

Fuente: SENA

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


3. Desarrollo de contenidos el mismo que el receptor reciba. Una analogía de 5
este protocolo puede ser una llamada telefónica,
3.1. Redes en Java el emisor llama al receptor, y cuando esta contesta
se establece una comunicación bidireccional. En
En este Resultado de Aprendizaje, caso de ocurrir alguna falla en la comunicación,
aprenderá a escribir programas en Java que ambos extremos se darán cuenta.
puedan comunicar computadores entre sí. Si bien
Java provee el paquete java.net que contiene las Algunas aplicaciones que usan TCP son: HTTP,
clases que permiten realizar estas conexiones, es FTP, Telnet (SNAJDLEDER 2013 pag 218).
necesario tener conocimientos básicos de redes
para reconocer cuál de estas clases son las más 3.1.3. UDP – “User Datagram Protocol”
apropiadas según la aplicación que se quiera crear.
A diferencia de TCP, la conexión establecida
3.1.1. Introducción a redes de computadores por el protocolo UDP no es confiable. En UDP los
datos son enviados a través de Datagramas, que
Cuando dos computadoras se conectan entre sí, lo son paquetes de datos independientes. En este
hacen a través de un protocolo de comunicación. protocolo los datos no llegan necesariamente
Estos pueden ser TCP (Transmission Control en el orden en que fueron enviados. Al no tener
Protocol) y UDP (User Datagram Protocol). que preocuparse por garantizar la entrega de la
información, este protocolo es más rápido que
3.1.2. TCP – Transmission Control Protocol TCP.

“TCP es un protocolo orientado a conexión Algunas aplicaciones que usan el protocolo UDP
que permite conectar dos aplicaciones de manera son: DNS, VoIp, TFTP.
confiable. Una vez establecida la comunicación
se crea un canal a través del cual cada una de 3.1.4. Puertos
las partes pueden enviar y recibir datos. TCP
garantiza que los datos recibidos en un extremo En este momento está conectado a internet
y en el otro sean íntegros y si esto no llegase a a través de su tarjeta de Red. Si bien es una única
ocurrir reportará un error.” (SNAJDLEDER 2013 conexión física (sea por cable de red o Wifi) puede
pág. 218). estar usando muchas aplicaciones que requieren
conexión de datos (Ej: Skype, Google Chrome,
Este protocolo permite entonces, tener la etc), estas se conectan a través de puertos. Dicho
confiabilidad que el dato que el emisor envía, será de otra forma, los puertos permiten redireccionar

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


6 internamente los datos a las aplicaciones o
procesos que los requieren.
Figura 1: SENA (2017)
Un ejercicio que puede hacer en este
momento es verificar en su sistema operativo
3.1.6. Clases para manejo de redes en Java
Windows qué puertos están siendo usados. Para
esto abra la línea de comandos de Windows
Java provee las siguientes clases para desarrollar
ejecutando cmd, y escriba el comando netstat -a.
aplicaciones con uso de redes:
Aparecerán las conexiones que tienen puertos
abiertos; el puerto lo puede distinguir después de
3.1.6.1. La clase InnetAddress
los dos puntos (:) ejemplo 192.168.0.10:10001 es
una conexión que está usando el puerto 10001.
La clase InetAddress permite la representación de
3.1.5. Direccion IP una dirección IP en Java. Los siguientes son los
métodos más usados de esta clase, cada uno de
La dirección IP es un número de 32 bits, o cuatro estos retorna un objeto tipo InetAddress:
números de 8 bits (En decimal desde 0 hasta 255)
que permite identificar una computadora (host) • getLocalHost()
dentro de una red. Ejemplo 192.168.0.4. En una
red interna cada computadora debe tener una IP Regresa la dirección IP del computador que está
diferente. ejecutando el programa.

3.1.5.1. Aplicaciones cliente/servidor • getByName(host)

Este tipo de aplicaciones está compuesto Regresa la dirección IP del host que se especi ica
por dos tipos de aplicaciones: La aplicación en el parámetro, por ejemplo getByName (“www.
servidor o server, que le provee servicios a la senasofiaplus.edu.co”) un objeto InetAddress con
aplicación cliente. Ambas pueden estar en una la dirección IP del servidor que aloja la página de
misma computadora o en diferentes computadoras senasofiaplus.
las cuales se conectan a través de puertos.
Los métodos anteriores pueden arrojar una
excepción UnknowHostException en caso de la
dirección IP no se encuentre.

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


7

El siguiente ejemplo en Java permite obtener el nombre del equipo local y la


dirección IP por consola.

import java.net.*;
public class VerDireccionIp{
public static void main(String[] args) {
InetAddress direccion=null;
try {
direccion = InetAddress.getLocalHost();
System.out.println(“Su IP es:
“+direccion.getHostAddress());
System.out.println(“Su NOMBRE es:
“+direccion.getHostName());
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
}

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


8 Otro ejemplo, en este caso, se desea saber la dirección IP del servidor que
tiene alojada la página web del SENA: www.senasofiaplus.edu.co

import java.net.InetAddress;
import java.net.UnknownHostException;
public class VerIpPaginaWeb{
public static void main(String[] args) {
InetAddress direccion=null;
try {
direccion = InetAddress.getByName(“www.senasofiaplus.edu.co”);
System.out.println(“La IP es:
“+direccion.getHostAddress());
} catch (UnknownHostException e) {
e.printStackTrace();
}

La documentación oficial de la clase InetAddress lo puede encontrar en


https://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


3.1.6.2. La Clase Socket conexión socket. 9
En Java, los sockets permiten crear una • int getPort()
conexión TCP entre dos máquinas. El cliente y el Regresa un entero con el puerto que se usó
servidor se conectan entre sí a través de los sockets para realizar la conexión socket.
de cada uno. Para poder realizar esta conexión el
socket incluye la dirección IP y el puerto. • void close()
Cierra la conexión del socket.
Puede encontrar la documentación oficial d e la
clase socket en Java en la dirección: • InputStream getInputStream()
https://docs.oracle.com/javase/7/docs/api/ Este método se usa para recibir información a
java/net/Socket.html través de un flujo de entrada tipo InputStream

Algunos constructores de esta clase son: • OutputStream getOutputStream()


Este método se usa para enviar información a
Socket (String host , int port) través de un flujo de salida tipo OutputStream
• Crea una conexión a través de un socket TCP
con la máquina especificada por host en el Cada socket tiene agrupado un par de flujos
puerto port. o streams, para entrada y salida. Por medio de
estos flujos se manda o recibe la información que
Socket(InetAddress address,int port) fluye entre dos sockets conectados entre sí. Estos
• Crea una conexión a través de un socket TCP flujos no se usan directamente, sino que se asocian
con la máquina especificada con la dirección IP otros tipos de flujos a estos flujos, permitiendo de
address en el puerto port. esta manera escribir (o leer) datos en forma mucho
más adecuada.
Algunos métodos importantes de esta clase:
• InetAddress getInetAddress()
Regresa un objeto tipo InetAddress con la 3.1.6.3. La clase ServerSocket
dirección IP de la máquina remota que con que
se hizo la conexión socket. La clase ServerSocket permite la creación
de sockets usados exclusivamente en la aplicación
• InetAddress getLocalAddress() servidor para esperar peticiones de conexión de
Regresa un objeto tipo InetAddress con la un cliente. Cuando llega una petición de conexión,
dirección IP de la máquina local que hizo la se asigna un socket para realizar el intercambio

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


10 de información. La documentación oficial la puede • InetAddress getInetAddress()
encontrar en : Regresa un objeto tipo InetAddress con la
https://docs.oracle.com/javase/7/docs/api/java/ dirección local a la cual está conectada el
net/ServerSocket.html socket.

3.1.6.3.1 Constructores • void close()


Este método cierra la conexión del socket.
El constructor que se usará en los ejemplos de Esta clase tiene otros constructores y
esta unidad será: métodos que pueden ser consultados en la
documentación oficial.
• ServerSocket(int port)
Este constructor crea un socket en el servidor 3.1.6.3.3. Ejemplo conexión básica cliente/
que escucha por peticiones de conexión de servidor usando sockets
un cliente en el puerto especificado en el
parámetro port, si port es 0 crea un socket en Como ejemplo, el siguiente código permite conectar
cualquier puerto libre. por sockets una aplicación cliente con una aplicación
servidor (ServidorSocket y ClienteSocket) a través
3.1.6.3.2 Métodos importantes del puerto 5432. Simplemente se va a establecer
la conexión y mostrar un mensaje de confirmación:
Algunos métodos de la clase ServerSocket que se
usarán en esta unidad son:

• Socket accept()
Este método bloquea la ejecución del programa
esperando por una conexión, la cual una vez
realizada, retorna un objeto tipo Socket con la
conexión establecida.

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


3.1.6.4. Clase ServidorSocket.java 11

import java.net.*;
import java.io.*;
public class ServidorSocket {
public static void main(String[] args) throws IOException {
Socket s=null;
ServerSocket ss= new ServerSocket(5432);

try{
System.out.println(“Esperando conexion “);
// Se queda en esta línea de ejecución esperando una conexión
s=ss.accept();
// Ha recibido una conexión y muestra el mensaje.
System.out.println(“He recibido conexion desde la IP “+s.getInetAddress());
}
catch(Exception ex){
ex.printStackTrace();
}
finally{
//Cerramos la conexión
if (s!=null)s.close();
System.out.println(“Conexion cerrada”);
}
}
}

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


12 ClienteSocket.java

import java.io.*;
import java.net.*;
public class ClienteSocket {
public static void main(String[] args) {
// TODO Auto-generated method stub
Socket s=null;
try {
//nos conectamos al servidor ubicado en la IP 127.0.0.1
//Esta IP es del servidor local, es decir, el mismo computador
s=new Socket(“127.0.0.1”,5432);

} catch (IOException e) {
e.printStackTrace();
}
}

Para realizar la prueba de este código, primero ejecute el código del servidor. Aparecerá en la consola el
mensaje “esperando conexión”. Inmediatamente ejecute el código del ClienteSocket. Verá que aparece en
consola el mensaje de recepción de la conexión y de despedida.

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


3.1.7. Ejemplo conexión cliente/servidor responderá. Esto se hará en un ciclo repetitivo 13
enviando información hasta que el usuario no digite nada en el campo
de entrada y envíe vacío el texto. En este caso se
En el siguiente ejemplo ampliando el anterior, asocian unos flujos intermedios BufferedReader y
el cliente va a enviar al servidor un texto y el DataOutputStream a los flujos de a comunicación
servidor devolverá como respuesta y determinará del socket getInputStream y getOutputStream
si en el texto recibido se encuentra la vocal a y respectivamente para el caso del servidor.

ServidorSocket2.java

import java.io.*;
import java.net.*;
public class ServidorSocket2{
public static void main(String[] args){
ServerSocket ss = null;
Socket s = null;
BufferedReader textoRecibidoDelCliente;
DataOutputStream textoEnviarAlCliente;
String stringRecibido;

try{
ss = new ServerSocket(5432);
System.out.println(“Servidor escuchando”);
//Esperando a recibir una conexion de cliente en puerto 5432
s = ss.accept();
System.out.println(“Ya se conecto el cliente”);
textoRecibidoDelCliente = new BufferedReader(new
InputStreamReader(s.getInputStream()));

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


textoEnviarAlCliente = new
14 DataOutputStream(s.getOutputStream());
// Recibir y responder hasta que llegue vacio
do{
stringRecibido = textoRecibidoDelCliente.readLine();
System.out.println(“Llego el texto: “ + stringRecibido);
//Respondemos al cliente. En este caso, devolvemos respuesta si
hemos encontrado
//la vocal a en el texto recibido
String stringBuscar = “a”;
int
posicionResultado=stringRecibido.indexOf(stringBuscar);
//indexOf si encuentra la vocal a devolvera un entero con el número de
posicion,
//si no encuentra devuelve -1
if (posicionResultado == -1){
textoEnviarAlCliente.writeUTF(“No se encontro la vocal a.
“);}
else {
textoEnviarAlCliente.writeUTF(“Si se encontro la vocal a”);
}
}while(stringRecibido.length()!=0);
//Enviamos mensaje de cierre de conexion.
System.out.println(“Ya termine de recibir, cerrando conexión”);
textoEnviarAlCliente.close();
textoRecibidoDelCliente.close();
s.close();
ss.close();
}catch (IOException e){
System.err.println(e.getMessage());
System.exit(1);
}
}
}

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


En el caso del cliente, los flujos intermedios DataInputStream y BufferedReader se asignan a los flujos de 15
a comunicación del socket getInputStream y getOutputStream respectivamente.

ClienteSocket2.java

import java.io.*;
import java.net.*;
public class ClienteSocket2 {
public static void main(String[] args) throws Exception {
Socket s=null;
PrintWriter textoAlServidor;
BufferedReader textoDelTeclado;
DataInputStream textoDelServidor;
String tecleado;
try {
s=new Socket(“127.0.0.1”,5432);
System.out.println(“Ya me conecte al servidor”);
//Abrimos conexion texto del teclado
textoDelTeclado = new BufferedReader(new
InputStreamReader(System.in));

//texto al servidor
textoAlServidor = new
PrintWriter(s.getOutputStream(),true);

//texto del servidor


textoDelServidor = new
DataInputStream(s.getInputStream());
do{

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


16 //Enviamos y recibimos informacion hasta
//que se envie vacio el texto.
System.out.print(“Servidor recibiendo informacion, teclea un
texto: “);
tecleado = textoDelTeclado.readLine();
textoAlServidor.println(tecleado);
System.out.println(“Respuesta =
“+textoDelServidor.readUTF());
}while(tecleado.length()!=0);
System.out.println(“Cliente termino de enviar”);
//cerramos conexiones abiertes
textoDelServidor.close();
textoDelTeclado.close();
textoAlServidor.close();
s.close();

} catch (IOException e) {
e.printStackTrace();
}
}
}

Para realizar la prueba de este código, primero puede usar el icono “Display Selected Console” en
ejecute el código del servidor. Inmediatamente el menú de la consola de ejecución). El icono es:
ejecute el código del ClienteSocket. Verá los
mensajes de conexión tanto en la consola de
ejecución del servidor como del cliente. Ingrese un
texto en la consola del cliente y vea la respuesta
del servidor. Para terminar la ejecución presione la Este ejemplo de aplicación cliente / servidor es
tecla Enter sin enviar ningún texto. la base para construir otras aplicaciones más
complejas, siguiendo el mismo principio lógico
(Nota: Dependiendo del editor Java que use, así explicado. El código fuente de las clases explicadas
mismo el icono que permite visualizar la consola en esta unidad las puede descargar en el material
de cada clase ejecutada. En el caso de Eclipse de apoyo y ejecutar en su computador.

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


17

4. Material anexo al tema

Para complementar los diferentes conceptos adquiridos en el presente


documento, se recomienda a los aprendices consultar:

Documentación Oficial Clase InetAddress Java


https://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html

Documentación Oficial Clase Socket Java


https://docs.oracle.com/javase/7/docs/api/java/net/Socket.html

Documentación Oficial Clase ServerSocket Java


https://docs.oracle.com/javase/7/docs/api/java/net/ServerSocket.html

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


18

5. Glosario

TCP: protocolo de comunicación usado para DIrección IP: número de 32 bits que se le asigna
aplicaciones que requieren confiabilidad en los a un equipo que pertenece a una red IP. Está
datos transmitidos. representado por cuatro números decimales entre
0 y 255.
UDP: protocolo de comunicación que envía los
datos a través de paquetes de información llamados Socket: clase de java que permite conectar dos
datagramas. No proporciona confiabilidad, pero si máquinas (cliente y servidor) a través de un puerto.
mayor velocidad que el protocolo TCP.
ServerSocket: clase de java que permite crear un
Puerto: interfaz que permite que varias servidor que espera una conexión de un cliente a
aplicaciones se conecten a través de un mismo través de un socket.
dispositivo de red redireccionando la información
a través de unas direcciones virtuales.

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


19

6. Referencias bibliográficas

SZNAJDLEDER, P. (2013). Java a fondo: - estudio del lenguaje y desarrollo de


aplicaciones. 2nd ed. Alfaomega Grupo Editor, p.218.

Docs.oracle.com. (2017). InetAddress (Java Platform SE 7). [online] Disponible en:


https://docs.oracle.com/javase/7/docs/api/java/net/InetAddress.html
[Consultado 11 Abr. 2017].

Docs.oracle.com. (2017). Socket (Java Platform SE 7). [online] Disponible en:


https://docs.oracle.com/javase/7/docs/api/java/net/Socket.html
[Consultado 11 Abr. 2017].

Docs.oracle.com. (2017). ServerSocket (Java Platform SE 7). [online] Disponible en:


https://docs.oracle.com/javase/7/docs/api/java/net/ServerSocket.html
[Consultado 11 Abr. 2017].

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje


20
Créditos Senior Equipo de Adecuación
Equipo de Adecuación Gráfica Claudia Rocio Varón Buitrago
Centro de Comercio y servicios
SENA Regional Tolima Asesor Pedagógico
Línea de Producción Ricardo Palacio

Director Regional Guionistas


Félix Ramón Triana Gaitán Genny Carolina Mora Rojas
Jesús Bernardo Novoa Ortiz
Subdirector de Centro
Álvaro Fredy Bermúdez Salazar Diseño y Diagramación
Diana Katherine Osorio Useche
Coordinadora de Formación Profesional Pedro Nel Cabrera Vanegas
Gloria Ines Urueña Montes Ismael Enrique Cocomá Aldana

Experto temático Programadores


Manuel Fernando Celemín Coneo Davison Gaitán Escobar
Héctor Horacio Morales García

Creatives commons
Atribución, no comercial, compartir igual.
Este material puede ser distribuido, copiado y exhibido por
terceros si se muestra en los créditos. No se puede
obtener ningún beneficio comercial y las obras derivadas
tienen que estar bajo los mismos términos de licencia que
el trabajo original.

FAVA - Formación en Ambientes Virtuales de Aprendizaje SENA - Servicio Nacional de Aprendizaje

También podría gustarte