Pages: [1]   Go Down
Print
Author Topic: Codice esercitazione Venerdì 21 Dicembre (esercizio 28): Socket & RMI  (Read 647 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Shin
Forumista
***
Offline Offline

Gender: Male
Posts: 822

Io sono ciò che sono per ciò che siamo tutti


WWW
« on: 21-12-2012, 12:30:06 »

Questo è il mio codice dell'esercitazione che abbiamo affrontato oggi a lezione, cioè la parte obbligatoria e la prima parte facoltativa dell'esercizio 28:

Quote
Scrivere un programma Java che conti il numero di periodi presenti nei tre libri della Divina Commedia, mostrandone i tre valori a computazione terminata.

Il programma dovrà:

    Effettuare una connessione con il server 192.168.45.4 151.97.252.130 port 80.
    Inviare al server la richiesta: GET /pappalardo/provaTPCD/19.aux\n\n
    Leggere il testo ricevuto una riga alla volta.
    Utilizzando il metodo finiscePeriodo() descritto oltre, contare man mano il numero di periodi, distinguendo il conteggio per i tre libri.
    Scrivere su standard output il numero calcolato per ciascun libro.

In particolare:

    Un periodo è inteso come una frase terminata da un carattere “punto” e può quindi estendersi su più righe del testo ricevuto.
    Il metodo che valuta la presenza o meno del carattere punto in una riga di testo, sia finiscePeriodo(), è un metodo locale che restituisce true o false a seconda che la stringa passata come parametro contenga o no il carattere punto.
    Il testo sarà inviato dal server in sequenza, cioè i tre libri saranno ricevuti in ordine. L'inizio di ciascun libro è identificato da una riga contenente il titolo soltanto, in caratteri maiuscoli, cioè INFERNO, PURGATORIO e PARADISO.


Rendere remoto il metodo finiscePeriodo(), utilizzando RMI e modificando il codice già scritto in modo che invochi la versione remota del metodo.

Nota: l'indirizzo IP corretto è 151.97.252.130 (cioè quello del nostro dipartimento).

Interfaccia:
Code:
import java.rmi.*;

public interface periodChecker extends Remote
{
public boolean finiscePeriodo(String str) throws RemoteException;
}

Server:
Code:
import java.rmi.*;
import java.rmi.server.*;
import java.rmi.registry.*;

public class server implements periodChecker
{
public boolean finiscePeriodo(String str)
{
for (int i = 0; i < str.length(); i++)
if (str.charAt(i) == '.')
return true;
return false;
}

public static void main(String[] args)
{
try
{
server obj = new server();
periodChecker stub = (periodChecker) UnicastRemoteObject.exportObject(obj, 0);

Registry reg = LocateRegistry.getRegistry("localhost");
reg.bind("pck", stub);

System.out.println("Server ready (CTRL-C quits)");
}
catch(Exception e)
{
e.printStackTrace();
}
}
}

Client:
Code:
import java.io.*;
import java.net.*;
import java.rmi.*;
import java.rmi.registry.*;

public class client
{
public static void main(String args[])
{
String tmp;
int count = 0;
try
{
InetAddress address = InetAddress.getByName("151.97.252.130");
Socket client = new Socket(address, 80);
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())), true);

out.println("GET /pappalardo/prova/19.aux\n\n");

Registry reg = LocateRegistry.getRegistry("localhost");
periodChecker stub = (periodChecker)reg.lookup("pck");

// mi sposto all'inizio dell'INFERNO
while ((tmp = in.readLine()).compareTo("INFERNO") == 0);

// Calcolo e stampo il numero di periodi dell'INFERNO
while (((tmp = in.readLine()) != null) && tmp.compareTo("PURGATORIO") != 0)
if (stub.finiscePeriodo(tmp))
count++;

System.out.println("Inferno: "+count);

count = 0;

// Calcolo e stampo il numero di periodi del PURGATORIO
while (((tmp = in.readLine()) != null) && tmp.compareTo("PARADISO") != 0)
if (stub.finiscePeriodo(tmp))
count++;

System.out.println("Purgatorio: "+count);

count = 0;

// Calcolo e stampo il numero di periodi del PARADISO
while (((tmp = in.readLine()) != null))
if (stub.finiscePeriodo(tmp))
count++;

System.out.println("Paradiso: "+count);

count = 0;

client.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
Logged

"Il peggiore analfabeta è l’analfabeta politico. Egli non sente, non parla, nè s’importa degli avvenimenti politici. Egli non sa che il costo della vita, il prezzo dei fagioli, del pesce, della farina, dell’affitto, delle scarpe e delle medicine dipendono dalle decisioni politiche.

L’analfabeta politico è così somaro che si vanta e si gonfia il petto dicendo che odia la politica.

Non sa, l’imbecille, che dalla sua ignoranza politica nasce la prostituta, il bambino abbandonato, l’assaltante, il peggiore di tutti i banditi,
che è il politico imbroglione, il mafioso corrotto, il lacchè delle imprese nazionali e multinazionali."

(Bertolt Brecht)

Collettivo SDAI: collettivosdai.altervista.org, facebook.
Movimento Studentesco Catanese: www.movimentostudentesco.org

https://github.com/ShinDarth
http://shinworld.altervista.org
http://www.openprogrammers.it

LinuxMint user.
Pages: [1]   Go Up
Print
Jump to: