El Socket - PowerPoint PPT Presentation

About This Presentation
Title:

El Socket

Description:

El enviador del archivo sabe donde est escuchando el recibidor para recibir la ... 1) El recibidor queda escuchando. a ver si alguien quiere mandarle algo ... – PowerPoint PPT presentation

Number of Views:44
Avg rating:3.0/5.0
Slides: 14
Provided by: UdeC5
Category:
Tags: el | recibidor | socket

less

Transcript and Presenter's Notes

Title: El Socket


1
El Socket
  • Un socket es un extremo de un link de
    comunicación entre dos programas que corren en
    una red. El socket esta asociado (amarrado,
    bound) a ub número de port de modo que la capa
    TCP pueda identificar exactamente la aplicación a
    la cual están destinados los datos que llegan a
    un computador.
  • Normalmente un servidor que corre en un
    computadore específico tiene un socket que está
    asociado a un número de port específico. El
    servidor espera, oyendo por el socket a que un
    cliente quiera establecer alguna comunicación.
  • Para que un cliente pueda comuncarse con el
    servidor debe saber a que port está asociado el
    socket por el cual el servidor está aceptando
    llamadas. Para hacer una petición de conexión el
    cliente debe tratar de hacer un rendezvous con
    por el port donde está escuchando el servidor.

2
El Socket (2)
  • Si todo sale bien, el servidor acepta la
    conexión. Con la aceptación el servidor recibe un
    nuevo socket asociado a un port nuevo (cuyo
    número no necesariamente conoce). El port
    original (por donde escuchaba) queda libre para
    seguir escuchando otras peticiones.
  • Se crea un link de comunicaciones bi-direccional
    entre el servidor y el cliente. En el servidor,
    el extremo está asociado al nuevo port.
  • En el cliente, si la conexión fue aceptada por un
    servidor, se crea un socket asociado a un port
    (cuyo nombre no es necesariamente conocido).
  • El cliente y el servidor se comunican escribiendo
    datos en o leyendo datos desde el socket.

3
Sockets en el Cliente en Java (1)
  • Cuando un programa cliente (llamador) en java
    desea conectarse con un servidor (en cualquier
    lenguaje!) debe saber primero dónde esta
    corriendo (host) y en que port está escuchando.
  • El host lo puede dar como dirección (Ej
    192.123.355.211) o como nombre (ej
    achawall.dcc.uchile.cl).
  • Sabiendo esto puede interntar un rendezvous con
    el servidor. Esto se hace intentando crear una
    conexión TCP y recogiendo el extremo del circuito
    virtual en un socket
  • Socket llamando
  • llamando new Socket(host,5555)
  • Esto queda esperando hasta que se realiza la
    conexión en el servidor y se crea el socket, que
    es el extremo local de la conexión. El otro
    extremo (servidor) NO está asociado al port 5555.
    Ese se usó solamente para oir.
  • Esto puede ocacionar un error si el host no
    existe, no está alcanzable por la red o no hay
    ningún servidor oyendo por ese socket. Para eso
    hay naturalmente un timeout.
  • Conviene por esto siempre ejecutarlo en un bloque
    try con el catch agarrando una excepción
    UnknownHostException

4
Sockets en el Cliente en Java (2)
  • Si todo sale bien con la conexión, podemos abrir
    un canal de lectura y/u otro de escritura para
    poder recibir y/o enviar datos.
  • PrintWriter out new PrintWriter(llamando.getOutp
    utStream(), true)
  • BufferedReader In new BufferedReader(new
  • InputStreamReader(llamando.getInputStream()))
  • getInputStream y getOutputStream abren flujos de
    datos orientados a la lectura y escritura de
    bytes por la línea. Printwriter y BufferedReader
    son filtros que permiten leer y escribir
    strings.
  • out.print(hola pelao) out.println(como
    estas)
  • String linea in.readLine()
  • El servidor debe enviar una marca de fin de línea
    (ascii) !!!!
  • Veamos un cliente que se conecta al servidor echo
    de una máquina Unix. Modifíquelo para que se
    conecte a otros servidores.

5
Programas Cliente en Java
  • Veamos un cliente que se conecta al servidor echo
    de una máquina Unix.
  • Cómo habría que modificarlo para que se conecte
    con el servidor date (13) y muestre la fecha?
    (ver DateClient.java)
  • Cómo habría que modificarlo para que se conecte
    con el servidor www (80) y muestre el archivo
    pedido?
  • Cómo habría que modificarlo para que se conecte
    con el servidor finger (79) y muestre la consulta
    pedida?
  • Cómo habría que modificarlo para que se conecte
    con el servidor ftp ( ???) y realice el diálogo?
  • Cómo habría que modificarlo para que se conecte
    con el servidor pop (110) y revise cuántos mails
    hay para un cierto usuario ?
  • Cómo se vería un cliente genérico que sirva de
    marco para todo esto?

6
Un Cliente Genérico
  • import java.io.
  • import java.net.
  • public class Cliente
  • public static void main(String args)
    throws IOException
  • Socket echoSocket null
    PrintWriter out null BufferedReader in
    null
  • if (args.length ! 2)
  • System.out.println(Use
    java Cliente lthostgt ltportgt ltprotocologt))
  • int nport Integer.parseInt(args1)
    int protocolo Integer.parseInt(args2)
  • try
  • echoSocket new
    Socket(args0,nport)
  • out new PrintWriter(echoSocket
    .getOutputStream(), true)
  • in new BufferedReader(new
  • InputStreamReader(echoSocket.getInputStream())
    )
  • catch (UnknownHostException
    e)
  • System.err.println("Don't
    know about host " args0)
  • System.exit(1)
  • catch (IOException e)

7
Sockets en el Servidor (1)
  • El servidor debe empezar por crear un socket
    servidor y asociarlo a un por desde donde
    escucuchará peticiones de posibles clientes que
    quieran conectarse.
  • ServerSocket escuchando
  • escuchando new ServerSocket(5555)
  • Con esto sólo ha creado el socket pero no está
    escuchando. Para poder empezar a escuchar debe
    hacer
  • Socket escuchando.accept()
  • Esta instrucción hace varias cosas
  • accept bloquea la ejecución del programa hasta
    que recibe una petición de un cliente por ese
    port
  • Cuando llega un requerimiento de conexión, se
    crea un circuito virtual entre ambos
    computadores.
  • El cliente recibe un extremo de esa conexión y
    el servidor la otra. Este otro extremo se asocia
    a otro socket que el sistemqa escoge
    convenientemente.

8
Sockets en el Servidor (2)
  • El servidor puede ejecutar los mismos métodos
    sobre su socket para abrir un flujo de entrada y
    salida de datos.
  • Aquí es importante el PROTOCOLO DE LA
    COMUNICACIÓN que no es más que las reglas que
    deben seguir servidor y cliente para comunicarse.
    Es muy importante que ambos tengan claros cuándo
    y qué se puede/debe escribir y/o leer. Ej. Cual
    es el protocolo de echo ?, de Date ? de telnet ?
  • Existen algunos otros métodos que se pueden
    ejecutar sobre un objeto de tipo Socket (notar
    que tante el servidor como el cliente estan con
    un socket de la misma clase después de haber
    establecido la comunicación)
  • InetAddress getInetAddress()
  • int getPort()
  • InetAddress getLocalAddress()
  • int getLocalPort()
  • void setSoTimeout(int timeout) int
    getSoTimeoute()
  • void setSoLinger(Boolean on, int val) int
    getSoLinger() (el delay despues de un close())
  • close()

9

A Server for the Date
We will program now a date server a computer
which has not one (for example, a MS-Windows
computer)
3 answer with the date in another socket
4 close the connection
Client
Date server
13
1 Create the server socket 2 start listening
DateServer
DateClient2
10
Sockets Transmisión de Archivos (1)
  • Hagamos ahora un para de programas que se
    transmitan un archivo.
  • El que recibe el archivo se pone a escuchar para
    que le manden un archivo (es el servidor !!!)
  • El enviador del archivo sabe donde está
    escuchando el recibidor para recibir la petición
    de transmisión de archivos.
  • El traspaso se hace a nivel de bytes para poder
    traspasar cualquier tipo de archivo.

11
Una situación de transmisión de archivos
2) El enviador trata de contactar al recibidor
1) El recibidor queda escuchando a ver si
alguien quiere mandarle algo
4) Send bytes
3) Read bytes from file
5) Write bytes in file
Repeat 3,4,5 until all the file is transmitted
Ver programas ArchEnviador.java ArchRecibidor.java
12
Sockets Transmisión de Archivos (2)
  • Hagamos ahora un par de programas algo más
    inteligentes
  • El Servidor queda esperando una petición en un
    port
  • Cuando llega una petición lee el nombre del
    archivo a entregar
  • Abre el archivo y lo transmite por el socket.
  • El cliente trata de conectarse con el servidor en
    el port acordado
  • una vez que resulta envía el nombre del archivo
    que quiere recuperar
  • Lee hasta que encuentra un fin de archivo y lo va
    guardando en un archivo del mismo nombre que el
    original.

13
Un servidor de archivos más inteligente
1) Filename from keyboard
2) Request file
4) Send file
3) Read File
5) Write file
Repeat 3,4,5 until all the file is transmitted
Ver programas ArchServer.java ArchCliente.java
Write a Comment
User Comments (0)
About PowerShow.com