Pages: [1]   Go Down
Print
Author Topic: Testo compito 21/12/2012  (Read 781 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
Giuseppe Pappalardo
Moderator
Apprendista Forumista
*****
Offline Offline

Posts: 398


« on: 21-12-2012, 12:44:11 »

http://www.dmi.unict.it/~giunta/TPCD.html
Logged
Shin
Forumista
***
Offline Offline

Gender: Male
Posts: 822

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


WWW
« Reply #1 on: 27-12-2012, 16:57:15 »

Mia soluzione, comprendente la parte facoltativa:

Server
Code:
import java.net.*;
import java.io.*;

public class server
{
public static Integer sommaTotale;
public static void main(String args[])
{
try
{
ServerSocket server = new ServerSocket(33333);
sommaTotale = 0;

System.out.println("Server in attesa di connessioni (CTRL-C per terminare)");

// ciclo infinito, in attesa di connessioni
while(true)
{
// chiamata bloccante, in attesa di una nuova connessione
Socket client = server.accept();

// la nuova richiesta viene gestita da un thread indipendente, si ripete il ciclo
connect nuovaConnessione = new connect(client);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}

// definisce il thread che andrà a gestire separatamente le singole connessioni
class connect extends Thread
{
// dichiarazione delle variabili socket e dei buffer
Socket client;
BufferedReader in;
PrintWriter out;

public connect(Socket client)
{
this.client = client;

// invoca automaticamente il metodo run()
this.start();
}

public void run()
{
try
{
String tmp;
int i = 0, somma = 0;

// inizializzo i buffer in entrata e uscita
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())), true);

// leggo la stringa in input
tmp = in.readLine();

// scorro fino a trovare il primo carattere cifra
while(!isInt(tmp.charAt(i)+""))
i++;

// sommo tutte le cifre
while(i < tmp.length())
{
somma += Integer.parseInt(tmp.charAt(i)+"");
i++;
}

// garantisco che un solo thread alla volta abbia accesso alla variabile sommaTotale
synchronized(server.sommaTotale)
{
server.sommaTotale += somma;
}

out.println("Somma: "+somma+"; Somma totale: "+server.sommaTotale);

// chiusura dei buffer e del socket
in.close();
  out.close();
  client.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}

public boolean isInt(String str)
{
   try
   {
Integer.parseInt(str);
return true;
   }
   catch (NumberFormatException nfe) {}
   return false;
}
}

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

public class client
{
public static void main(String[] args)
{
/* inizio verifica della correttezza dei parametri */

String utilizzo = ">> Utilizzo: java client XX...XNN...N\nDove:\n - XX...X è una sequenza di caratteri non cifra\n - NN...N è una sequenza di cifre (da 0 a 9)";
int i;

// controllo se il numero di parametri è 1 e se il primo carattere non è una cifra
if (args.length != 1 || isInt(args[0].substring(0,1)))
{
System.out.println(utilizzo);
return;
}

// scorro tutti i caratteri non cifre
i = 1;
while(i < args[0].length() && !isInt(args[0].substring(i,i+1)))
i++;

// controllo se sono già arrivato alla fine della stringa senza trovare numeri
if (i == args[0].length())
{
System.out.println(utilizzo);
return;
}

// controllo se tutti i caratteri dalla prima cifra fino alla fine della stringa sono a loro volta cifre
while(i < args[0].length())
{
if (!isInt(args[0].substring(i,i+1)))
{
System.out.println(utilizzo);
return;
}
i++;
}

/* fine verifica della correttezza dei parametri*/

try
{
// creo il socket
InetAddress indirizzo = InetAddress.getByName("localhost");
Socket client = new Socket(indirizzo, 33333);

// creo i buffer
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())), true);

// invio stringa
out.println(args[0]);

// ricevo e stampo la risposta
System.out.println(in.readLine());

// chiusura dei buffer e del socket
in.close();
  out.close();
  client.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}

public static boolean isInt(String str)
{
   try
   {
Integer.parseInt(str);
return true;
   }
   catch (NumberFormatException nfe) {}
   return false;
}
}

Come sempre, se avete domande o consigli riguardo la mia soluzione siete i benvenuti.
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: