Sistemas Distribuidos: Práctica 1

Descripción:

En esta práctica se realizará un ensayo con diferentes protocolos de acceso a servicios de amplia difusión en Internet: localtime, http, pop3.


Servicio localtime

Ejemplo de acceso al servicio usando como cliente telnet:

[fdiaz@infodep03 fdiaz]$ telnet 192.168.1.149 13
Trying 192.168.1.149...
Connected to infodep03 (192.168.1.149).
Escape character is '^]'.
14 MAR 2005 11:39:13 CET
Connection closed by foreign host.
[fdiaz@infodep03 fdiaz]$

Servicio web

Ejemplo de acceso al servicio usando como cliente telnet:
[fdiaz@infodep03 fdiaz]$ telnet 192.168.1.149 80
Trying 192.168.1.149...
Connected to infodep03 (192.168.1.149).
Escape character is '^]'.
GET /~fdiaz/sd/index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD><TITLE>Pagina de la asignatura SD</TITLE>
<META content=document name=resource-type>
<META content=global name=distribution>
<META http-equiv=Content-Type content="text/html; charset=iso-8859-1">
<META content="Fernando Diaz" name=author>
<META content="Microsoft FrontPage 4.0" name=GENERATOR>
<META http-equiv="refresh" content="0; url=http://infodep03/~fdiaz/sd/index20050119.html">
</HEAD>
<BODY>

</BODY></HTML>
Connection closed by foreign host.
[fdiaz@infodep03 fdiaz]$
Ejemplo de solicitud de una página inexistente:
[fdiaz@infodep03 fdiaz]$ telnet 192.168.1.149 80
Trying 192.168.1.149...
Connected to infodep03 (192.168.1.149).
Escape character is '^]'.
GET /indice.html
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /indice.html was not found on this server.</p>
<hr />
<address>Apache-AdvancedExtranetServer/2.0.47 (Mandrake Linux/6mdk) mod_perl/1.99_09 Perl/v5.8.1 mod_ssl/2.0.47 OpenSSL/0.9.7b PHP/4.3.2 Server at 192.168.1.149 Port 80</address>
</body></html>
Connection closed by foreign host.
[fdiaz@infodep03 fdiaz]$

Servicio pop3

Ejemplo de acceso al servicio usando como cliente telnet:
  1. Fase de autorización.

    Nos conectamos como el usuario klinton:

    [fdiaz@infodep03 fdiaz]$ telnet 192.168.1.149 110
    Trying 192.168.1.149...
    Connected to infodep03 (192.168.1.149).
    Escape character is '^]'.
    +OK POP3 infodep03 v2003.83mdk server ready
    USER pop3
    +OK User name accepted, password please
    PASS .pop3.
    +OK Mailbox open, 3 messages
    
  2. Fase de transacción.

    Solicitamos varios servicios: el estado del buzón, el tamaño del segundo mensaje, recuperamos el mensaje número 21, a continuación lo borramos del buzón, y, por último, terminamos la conexión con el servidor.

    
    STAT
    +OK 3 1539
    
    LIST
    +OK Mailbox scan listing follows
    1 485
    2 498
    3 556
    .
    
    RETR 2
    +OK 498 octets
    Return-Path: <fdiaz@infodep03.euisg.uva.es>
    X-Original-To: pop3@infodep03
    Delivered-To: pop3@infodep03.euisg.uva.es
    Received: by infodep03.euisg.uva.es (Postfix, from userid 500)
            id E3342583A5; Mon, 14 Mar 2005 11:56:46 +0100 (CET)
    To: pop3@infodep03.euisg.uva.es
    Subject: otro mail de prueba
    Message-Id: <20050314105646.E3342583A5@infodep03.euisg.uva.es>
    Date: Mon, 14 Mar 2005 11:56:46 +0100 (CET)
    From: fdiaz@infodep03.euisg.uva.es (Fernando Diaz Gomez)
    Status:
    
    Hola, que tal?
    .
    
    QUIT
    +OK Sayonara
    Connection closed by foreign host.
    [fdiaz@infodep03 fdiaz]$
    

Programación en Java

Recrearemos los ejemplos anteriores construyendo pequeños programas usando el lenguaje Java. El siguiente ejemplo usa el servicio localtime mediante sockets TCP.


import java.net.*;
import java.io.*;
public class GetTime
{
   public static void main(String[] args)
   {
     Socket client = null;
     try {
       client = new Socket("infodep03", 13);
     }
     catch (UnknownHostException hostError) {
       System.err.println(hostError.getMessage());
       System.exit(1);
     }
     catch (IOException genericError)
     {
       System.err.println(genericError.getMessage());
       System.exit(1);
     }
     try {
       DataInputStream in =
         new DataInputStream(client.getInputStream());
         String inputLine;
         while ((inputLine = in.readLine()) != null) {
           System.out.println("Recibido: " + inputLine);
         }
     }
     catch (IOException IOError) {
       System.err.println(IOError.getMessage());
       System.exit(1);
     }
  }
}
Lo mismo se puede realizar mediante sockets UDP.

import java.net.*;
public class UDPTest
{
   public static void main(String[] args)
                            throws Exception
   {
      DatagramSocket  socket;
      DatagramPacket  packet;
      InetAddress     address;
      byte[]          message = new byte[256];
      //
      // Send empty request
      //
      socket = new DatagramSocket();
      address=InetAddress.getByName("infodep03");
      packet = new DatagramPacket(message,
                          message.length, address, 13);
      socket.send(packet);
      //
      // Receive reply and display on screen
      //
      packet = new DatagramPacket(message,
                                  message.length);
      socket.receive(packet);
      String received =new String(packet.getData(), 0);
      System.out.println("Received: " + received);
      socket.close();
   }
}

Programación con Sockets

Finalmente, se propone la compilación y ejecución de los siguientes programas que utilizan sockets: 
  Ejemplos en C Ejemplos en Java
Protocolo UDP cliente: socketudpcli.c
servidor: socketudpser.c
cliente: socketudpcli.java
servidor: socketudpser.java
Protocolo TCP cliente: sockettcpcli.c
servidor: sockettcpser.c
cliente: sockettcpcli.java
servidor: sockettcpser.java

Entre otras cosas se pueden probar: