8
Exercicis Sockets V: Notes prèvies: - En aquest document, per les proves client/servidor, comptarem amb la màquina física i 2 màquines virtuals Ubuntu (totes 3 amb Eclipse instalat). - Eclipse a Linux: si executem un programa sense suficients permisos, ens podrà mostrar una pantalla com la següent (en aquest cas, indicativa que no tenim permisos suficients per poder arrencar un programa que escolti pel port 7): El que haurem de fer és executar Eclipse com a root:

01-Exercicis Sockets V

  • Upload
    mapf55

  • View
    233

  • Download
    6

Embed Size (px)

DESCRIPTION

Sockets

Citation preview

Exercicis Sockets V:

Notes prvies:

En aquest document, per les proves client/servidor, comptarem amb la mquina fsica i 2 mquines virtuals Ubuntu (totes 3 amb Eclipse installat).

Eclipse a Linux: si executem un programa sense suficients permisos, ens podr mostrar una pantalla com la segent (en aquest cas, indicativa que no tenim permisos suficients per poder arrencar un programa que escolti pel port 7):

El que haurem de fer s executar Eclipse com a root:

Si ja tenim el port ocupat per un altre servidor, ens mostrar una pantalla semblant a la segent:

Amb la comanda:

netstat -atu

podem comprovar els servidors TCP i UDP que tenim escoltant al sistema:

Veiem que ja hi ha un servidor echo escoltant al port 7. Per comprovar els nombres dels ports podem executar:

netstat -atun

que mostra els nmeros de port enlloc dels Well Known Ports:

Per tant per poder executar el nostre servidor Echo, hem de desactivar els servidors Echo del sistema. Ho podem fer amb la segent comanda:

I comprovem que ja no hi ha cap servidor escoltant pel port Echo:

1. Servidor TCP. Com ja sabeu de la teoria, un servidor TCP segueix el segent esquema:

Una possible implementaci del servidor Daytime podria ser la segent (on podreu comprovar que segueix lesquema):

package dayTimeTCPserver;import java.net.*;import java.io.*;import java.util.Date;

public class DayTimeTCPserver {public static void main(String[] args) {ServerSocket servidorDayTime = null;try {servidorDayTime = new ServerSocket(13); //el port daytime es el 13while (true) {try {Socket connectionSocket = servidorDayTime.accept();System.out.println("Despres del metode accept");System.out.println("Client connectat " +connectionSocket.getInetAddress().getHostAddress() + " al port " +connectionSocket.getPort());Writer out = new OutputStreamWriter(connectionSocket.getOutputStream());Date now = new Date();out.write(now.toString() +" (1 hora menos en Canarias).\r\n");out.flush();connectionSocket.close();} catch (IOException ex) {}}} catch (IOException ex) {System.out.println(ex);} finally {try {if (servidorDayTime != null) servidorDayTime.close();} catch (IOException ex) {}}}}

Respecte al programa anterior:

El mtode accept() bloqueja el programa fins que una connexi dentrada es realitza.

Es demana:

a) Comproveu que fa el programa quan el port pel qual vol escoltar, est ocupat per un altre servidor. Com ho heu fet?

b) Podeu fer servir qualsevol port pel servidor? Proveu a fer un canvi. Quins canvis haureu de fer al client per qu el programa client/servidor continu funcionant?

c) Modifiqueu el programa servidor daytime de forma que trigui bastants segons a servir a un client (podeu posar un sleep(30)). Comproveu com es comporta el programa quan 2 clients es connecten. Per veure que fa el sistema operatiu, podeu fer servir la comanda: netstat -at | grep daytime

2. Fer un servidor Echo TCP.

3. Fer un servidor Daytime UDP.

Un Servidor UDP s molt semblant a un Client UDP. Entre les diferncies tenim que el servidor executa un bucle infinit (per respondre als clients).

Recordeu de la teoria:

4. Fer un servidor Echo UDP.

5. Fer un servidor TCP que dialogui amb el client Web de lexercici 4 del bloc 4.