Está en la página 1de 10

UNIVERSIDAD NACIONAL DE SAN ANTONIO ABAD DEL CUSCO

Departamento Acadmico de Informtica


REDES Y TELECOMUNICACIONES 2

Lab 01: Programacin de Sockets en TCP


Ing Manuel Pealoza Figueroa
Dime y lo olvidar. Mustrame y lo recordar. Involcrame y lo entender
Proverbio chino

1.

OBJETIVOS:
1.1
1.2
1.3
1.4

2.

Entender lo bsico de la comunicacin por redes.


Programar aplicaciones de red usando sockets.
Aprender como construir aplicaciones cliente/servidor que se comunican usando
sockets
Aprender el uso de sockets en Java.

BASE TEORICA COMPLENTARIA


Capa de Transporte:
- Puede ofrecer a sus usuarios un sistema transparente de intercambio de datos
confiable, operando de extremo a extremo (end-to-end).

- La capa de transporte es la responsable por la entrega proceso-a-proceso la


entrega de un paquete, la parte de un mensaje, desde un proceso a otro.

TCP: Transmission Control Protocol


-

RFC 793
Transporte/Servicio orientado a la conexin
Protocolo de transporte de Internet
Transferencia de datos full-dplex
Transporte confiable:
Control:
o de transmisin
o de flujo
o de errores
o de congestin de red
o ...
Provee servicio a la capa de aplicacin
Adaptable a LAN/WAN
Transferencia de un stream de bytes entre sistemas finales (end-to-end)

Cuando 2 aplicaciones desean comunicarse el uno al otro confiablemente, ellos


establecen una conexin y envan datos de una parte a la otra sobre esa conexin.
TCP provee un canal punto-a-punto para aplicaciones que requieren comunicaciones
confiables.
o HTTP (HyperText Transfer Protocol), FTP (File Transfer Protocol), y Telnet son
algunos ejemplos de aplicaciones que requieren un canal de comunicacin
confiable.
o El orden en la cual los datos son enviados y recibidos sobre la red es crtico
para el xito de estas aplicaciones.
o Cuando HTTP es usado para leer desde un URL, los datos tienen que ser
recibidos en el orden en el cual fueron enviados. De otra manera, se acabara
con un archivo HTML revuelto, un archivo ZIP corrupto, alguna otra
informacin invlida.

Puertos:
- En general, una computadora tiene una simple conexin fsica a la red.
o Todos los datos destinados a una computadora en particular llega a travs de
esa conexin.
o Sin embargo, los datos puede ser pretendidos por diferentes aplicaciones

corriendo en el mismo computador.


o As como la computadora sabe a cual aplicacin reexpedir los datos?

A travs del uso de los puertos


- Cada proceso que desea comunicarse con otro proceso se identifica a si mismo para
la suite de protocolos TCP/IP por 1 ms puertos.
- Los datos trasmitidos por el Internet estn acompaados por informacin de
direccionamiento que identifica a la computadora y al puerto para el cual estn
destinados.
o La computadora est identificada por su direccin IP de 32-bit.
o Los puertos son identificados por un nmero de 16-bit, los cuales TCP y UDP
usan para entregar los datos a la aplicacin correcta.
-

Hay 2 tipos de puertos:


o "Well-known" bien-conocidos:
0: reservado
1 1023: procesos servidor
o Efmeros:
1023 - 65535: usuarios, clientes

- Sin embargo, el IETF IANA define 3 rangos de puertos:


o Puertos Well-Known bien-conocidos
rango: 0 1023
son asignados por el IANA
o Puertos Registrados
rango: 1024 49151
no deberan ser usados sin el registro del IANA
o Puertos Dinmicos y/o Privados
rango: 49152 65535
tpicamente usados como puerto fuente por clientes TCP UDP.

Socket:
- una interface:
o en el host local
o creada por la aplicacin
o controlada por el SO
(una "puerta") dentro de la cual el proceso de aplicacin puede tanto enviar como
recibir mensajes a/desde otro proceso de aplicacin

- Conexiones:
o Normalmente, un servidor corre sobre una computadora especfica y tiene un
socket que est LIGADO al nmero de puerto respectivo.
o El servidor justamente espera, escuchando al socket por un cliente haga una
peticin de conexin.

o En el lado del cliente: el cliente sabe el nombre_de_host de la mquina en el


cual el servidor est corriendo y el nmero de puerto en el cual el servidor
esta escuchando.
Para hacer una peticin de conexin, el cliente intenta citarse con el
servidor en la mquina y puerto del servidor.
El cliente tambin necesita identificar a si mismo al servidor as se
liga a un puerto local que usar durante la conexin (el nmero de
puerto es usualmente asignado por el sistema).

o Si todo va bien, el servidor acepta la conexin.


A la aceptacin, el servidor obtiene un nuevo socket ligado a su mismo
puerto local y tambin tiene su socket seteado a la direccin y puerto
del cliente.
El servidor necesita este nuevo socket a fin de poder continuar
escuchando en el socket original por peticiones de conexin de otros
clientes mientras atiende sirve a las necesidades del cliente
conectado.

o En el lado del cliente, si la conexin es aceptada, un socket es


satisfactoriamente creado y el cliente puede usar este socket para
comunicarse con el servidor.
o El cliente y el servidor pueden ahora comunicarse con escribir A leer DESDE
sus sockets.
- El par <direccin IP>, <N de puerto> brinda una identificacin nica para los
servicios de capa de aplicacin en un host, y sirve para identificar a un socket.
o Cada lado de una conexin TCP tiene un socket que puede ser identificado
por:
la 3-tupla <TCP, direccin IP, # puerto>

la 2-tupla <direccin IP, # puerto>.


o Si 2 procesos estn comunicndose sobre TCP, ellos tienen una conexin
lgica que es de una manera nica identificable por los 2 sockets involucrados,
esto es, por:
una 5-tupla <TCP, direccin IP local, # puerto local, direccin IP
remota, # puerto remoto>

una 4-tupla <direccin IP local, # puerto local, direccin IP remota, #


puerto remoto>.
o Entonces, una conexin TCP est identificada por un par de sockets (el del
cliente y el del servidor) en ambos extremos.

3.

RECURSOS
Los recursos a utilizar en el trabajo de laboratorio son:
3.1 Java

4.

DESARROLLO DE LA PRACTICA:
En el presente trabajo de laboratorio se visualizar el estado de las conexiones TCP y se
implementar tanto un cliente que enva datos en minscula a un servidor, como un
servidor que recibe datos en minscula desde un cliente y lo devuelve de regreso pero
en maysculas haciendo uso del lenguaje Java.
4.1

Estado de las conexiones TCP:


- abrir una ventana DOS
- en el Prompt de comandos tipear:
netstat
o muestra las conexiones, puertos de escucha, estado de las conexiones y

estadsticas por protocolo (-a)

4.2

Escribir una aplicacin cliente/servidor que implemente el servicio CAMBIAR


DATOS EN MINUSCULAS A MAYUSCULAS.

En la programacin de sockets, la estructura del programa es en mucho el


mismo:

Abrir un socket
Abrir un stream de entrada y un stream de salida para el socket.
Leer desde y escribir hacia el stream conforme al protocolo del servidor.
Cerrar los streams.
Cerrar el socket.
-

Ejemplo: aplicacin cliente-servidor:


APLICACIN CLIENTE:
1. Pre-condicin: El proceso servidor debe estar 1ro. en ejecucin
2. Cliente lee la lnea desde la entrada estndar (stream inDesdeUsuario), y
lo enva al server va socket (stream outAlServer)
3. El servidor lee la lnea desde el socket.
4. El server convierte la lnea a maysculas, lo enva de regreso al cliente
5. Cliente lee, imprime la lnea modificada desde el socket (inDesdeServer)

APLICACIN SERVIDOR Y CLIENTE:

APLICACIN CLIENTE:
ClienteTCP.java
/*
*/
import java.io.*;
import java.net.*;
class ClienteTCP {
public static void main(String argv[]) throws Exception
{
// variables
String sentencia;
String sentenciaModificada;
// crear un stream de entrada para la entrada del usuario
BufferedReader inDesdeUsuario =
new BufferedReader(new InputStreamReader(System.in));
// crear socket cliente y conectarse al server
Socket socketCliente = new Socket("id_Servidor", 6789);
// crear un stream de salida ligado al socket
DataOutputStream outAlServidor =
new DataOutputStream(socketCliente.getOutputStream());
// crear un stream de entrada ligado al socket
BufferedReader inDesdeServidor = new BufferedReader(new
InputStreamReader(socketCliente.getInputStream()));
// leer entrada
sentencia = inDesdeUsuario.readLine();
// enviar la entrada al server
outAlServidor.writeBytes(sentencia + '\n');
// leer paquete de rplica del server
sentenciaModificada = inDesdeServidor.readLine();
System.out.println("RESPUESTA DESDE EL SERVER: "
+ sentenciaModificada);
// cerrar
socketCliente.close();
}
}

APLICACIN SERVIDOR:
ServidorTCP.java
/*
*/

import java.io.*;
import java.net.*;
class ServidorTCP {
public static void main(String argv[]) throws Exception
{
String sentenciaCliente;
String sentenciaEnMay;
// crear el socket servidor (TCP) en el puerto 6789
ServerSocket socketServidor = new ServerSocket(6789);
while(true) {
// el socket servidor espera, escuchando por contacto por el cliente,
// si lo acepta un nuevo socket es creado y la conexin es hecha
Socket socketConexion = socketServidor.accept();
// crear un stream de entrada ligado al socket
BufferedReader inDesdeCliente = new BufferedReader(
new InputStreamReader(socketConexion.getInputStream()));
// crear un stream de salida ligado al socket
DataOutputStream outAlCliente =
new DataOutputStream(socketConexion.getOutputStream());
// leer el mensaje desde el socket
sentenciaCliente = inDesdeCliente.readLine();
// construir respuesta
sentenciaEnMay = sentenciaCliente.toUpperCase() + '\n';
// escribir el mensaje al socket
outAlCliente.writeBytes(sentenciaEnMay);
}
}
}
-

En Windows abrir 2 ventanas DOS, e ir al directorio donde se encuentran los


programas fuente.
Si necesario, en ambas ventanas, establecer la ruta al compilador y al
intrprete de Java

SET PATH=%PATH%;C:\Archivos de programa\Java\jdk1.6.0\bin


-

En cada ventana, compilar el correspondiente archivo de Java

javac ClienteTCP.java
javac ServidorTCP.java
-

En la ventana del servidor ejecutar la aplicacin servidor

java ServidorTCP

En la ventana del cliente ejecutar la aplicacin cliente.

java ClienteTCP
-

(comentarios)

5. CONTROL:
TRABAJOS DE LABORATORIO.
5.1

Investigar y documentar en netstat las opciones:


-n, -r, -b

5.2

Investigar y documentar en netstat opciones sobre las interfaces presentes en la


PC.
La asistencia al laboratorio se considera como tal si se cumple con lo solicitado en
4.

5.3

También podría gustarte