You are on page 1of 10

Sockets

Son un sistema de comunicación entre procesos de diferentes máquinas de


una red. Más exactamente, un socket es un punto de comunicación por el
cual un proceso puede emitir o recibir información.

A continuación se esquematiza el funcionamiento de un socket cliente-


servidor.
Normalmente, un servidor se ejecuta sobre una computadora específica y
tiene un socket que responde en u puerto especifico. El servidor únicamente
espera, escuchando a través del socket a que un cliente haga una petición.

En el lado del cliente: el cliente conoce el nombre de host de la maquina en


la cual el servidor se encuentra ejecutando y el número de puerto en el cual
el servidor está conectado.

En lenguaje Java el servidor establece un puerto y espera durante un cierto


tiempo (time out segundos), a que el cliente establezca la conexión, y el
servidor abrirá la conexión socket con el método accept ().

De la misma forma el cliente establece una conexión con la maquina host a


través del puerto que se designe en puerto # 1 cliente y el servidor se
comunicara como manejadores input Stream y output Stream

Socket: implementa un extremo de la conexión TCP

Server socket: se encarga de implementar el extremo servidor de la


conexión de los clientes

Datagram Socket: implementa tanto el servidor como el cliente cuando se


utiliza UDP

Datagram Packet: implementa un datagram packet, que se utiliza de


paquetes sin conexión

Inet Address: se encarga de implementar la dirección IP

Tipos de Sockets

   Sockets TCP Sockets UDP

Las aplicaciones piden al S.O una comunicación TCP controlada por UDP:

- Orientada a la conexión

- Transferencia de bloques

- Comunicación fiable y ordenada

- También se denominan sockets


- Sin conexión ni fiabilidad

 De tipo Stream ni entrega ordenada

-  Permite difusiones

- También se denominan Sockets de tipo datagrama.

Dentro de los paquetes java.net existen 3 clases de sockets

  Socket cliente TCP


  Server Socket servidor TCP
  Datagram Socket cliente / servidor UDP

También hay otras clases auxiliares que facilitan la programación de


aplicaciones de red

Clase InetAddress

-InetAddress es la clase que se utiliza para almacenar direcciones IP

- Algunos métodos:

  InetAddressgetByName (String nombre)- Obtiene la dirección IP


asociada a un nombre
  String get Host Address ()- Devuelve la dirección IP en formato
“aa.bb.aa.dd”
   String get Host Name ()- Devuelve el nombre del host

Socket TCP

o Cliente
  Inicia la conexión con el servidor
  Especifica la dirección IP y el puerto del proceso
  Cuando crea un socket establece la conexión con el servidor

o Servidor
  Ha de estar en ejecución
  Debe de haber creado un socket
  (1) donde recibir a los clientes que conectan con el
  Espera a que algún cliente se conecte

 Ejemplo Socket Cliente

import java.net.*;

import java.io.*;

class cliente TCP{

public static void main (string args [ ] )

trows unknows Host Exception, IOExecption {

Sockets = new socket (“localhost”, 5000);

Buffered Reader in= new Buffered Reader (new input Stream Reader (s.get
input Stream ()));

System.out.println (in. readLine());

s.close();

Socket Servidor

Import java.net.*;

Import java.io.*;

Class Servidor TCP {

Public static void main (String args [ ] ) throws

Unkno wn Host Exception, IOException {

Server Socket Ss= new Server Socket (5000);

Socket s= ss.accept (); // espero a que llegue el cliente


Print writer out = new

Print writer (s. get Output Stream () true);

Out,println (“Bienvenido al servidor de prueba de redes”);

s.close();

ss.close();

Servidor TCP2

Import java.net.*;

Import java.io.*;

Class servidor TCP2 {

Public static void main (String args [ ] ) throws

Unkno wn Host Exception, IOException {

Server Socket Ss= new Server Socket (5000);

Socket s= ss.accept (); // espero a que llegue el cliente

Int cliente =1;

While (true) {

Socket s = ss.accept (); // espera una conexión de un cliente

Print writer out = new Print writer (s. get Output Stream () true);

System.out.println (“Eres el cliente” + cliente++);

s.close ();

}
}

Cliente TCP2

Import java.net.*;

Import java.io.*;

Class Cliente TCP2 {

Public static void main (String args [ ] ) throws Unknown Host Exception,
IOException {

Socket s= new Socket (“local host”, 500);

Buffered Reader in = new Buffered Reader (new Input Stream Reader (s.get
input Stream ()));

Print writer out = new Print writer (s. get Output Stream ());

Out.print (“GET / HTTP/ 1.0” +”\r\n”);

Out.print (“\r\n”);

Out.flush()

System.out.printl(in.readLine ());

s.close();

Ejemplo Básico Cliente

Import java.net.*;

Import java.io.*;
Class Cliente {

Static final String HOST = “local Host”;

Static final int Puerto = 500;

Public Cliente () {

Try {

Socket sk Cliente = new socket (Host, Puerto);

Input stream aux = sk Cliente. Get Input Stream ();

Data Input Stream flujo = new Data Input Stream (aux);

System.out.println (flujo.read UTF ());

Sk Cliente.close ();

Cacht (Exception e) {

System.out.println (e.get Message ());

Public static void main (String [ ] args ) {

new Cliente ()

Ejemplo Básico Servidor

Import java.net.*;
Import java.io.*;

Class Servidor {

Static final int Puerto = 500;

Public Cliente () {

Try {

Socket sk Servidor = new Server socket (Puerto);

System.out.println (“Escucho el puerto”+ PUERTO);

For (int num Cli = 0; num Cli<3; numCli++); {

Socket skCliente = skServidor.accept (); // crea objeto

System.ou.println (“Sirvo al cliente” + num Cli);

Out put Stream aux = skCliente.get Out put Stream ();

Data out put Stream flujo = new Data Out put Stream (aux);

Flujo.write UTF(“Hola cliente” + num Cli);

Sk Cliente.close ();

System.out.println(“Demasiados clients por hoy”);

Cacht (Exception e) {

Sytem.out.println (e.get Message ());

Public static void main (String [ ] args ) {


New Servidor ();

Socket UDP

 No se establece una conexión previa al envió / recepción de datos


 Los datos se envían en bloques (datagramas)
 Los datagramas son objetos de la clase Datagram Packet. Cada
datagram contiene la dirección de destino y no puerto
 Los Datagramas pueden no llegar en el mismo orden en que se
enviaron
 Permiten difusiones (broadcast y multicast)
 Para enviar o recibir datagramas (Datagram Packet) se utilizan
objetos Datagram Socket o Multicast Socket.
 Se diferencia por el tipo de canal
 Datagram socket - - punto a punto no dedicado
 Multicast socket - - Multipunto

Dos Clases

  Datagram socket : para enviar o recibir datagramas


  Datagram Packet : paquete de datos o datagrama
Datagram Packet

  Paquete de datos (datagrama) a transmitir o recibir a través de


un socket UDP (objeto Datagram Socket).
  Un datagram consta de:

 Una cabecera . dirección de origen y destino del paquete, el


puerto, la longitud del paquete, un cheek sum, etc
 Cuerpo: datos del paquete

Constructores

o Para recibir datos:


 Datagram Packet (byte [ ] buffer, int n)
o Para enviar datos:
 Datagram Packet (byte [ ] buffer, int n, Inet Address dest,
int puerto)
o Buffer: array que almacenara los datos a enviar o recibir
o n: tamaño máximo del datagrama a enviar o recibir
o dest : es la dirección de la maquina destinataria del datagrama
o puerto: puerto en el que atiende las peticiones el servidor
Métodos

  InetAddress get Address () -Devuelve la dirección almacenada en el


paquete
  Init get port () -Devuelve el puerto almacenado en el paquete
  Byte [ ] get Data () -Devuelve los datos almacenados en le paquete
  Init get lenght () -Devuelve el tamaño de los datos almacenos en el
paquete
  Void set Address (inet Address dest) -Establece la direccion de destino
  Void set Data (byte [ ] buffer) -Establece los datos a enviar
  Void set lenght (int n) -Establece el tamaño máximo del paquete

You might also like