Pages: [1]   Go Down
Print
Author Topic: Esercizio 10 (server banca)  (Read 629 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: 19-12-2012, 17:48:36 »

http://www.dmi.unict.it/pappalardo/prova/10.html

Quote
Prima parte (richiesta)
Implementare in C o Java, su localhost, un programma server banca, connection-oriented, che:

    mantenga un array di 10 interi conto che rappresentano il saldo dei conti da 0 a 9;
    risponda, su localhost, port 7777 ai seguenti messaggi:
        [Un] dove n, da 0 a 9, è il numero del conto;
        l'effetto sarà di rendere il conto n quello attuale, cioè su cui operano implicitamente gli altri comandi;
        [Vxyzw] dove xyzw sono 4 cifre intere;
        l'effetto sarà di versare la somma xyzw sul conto attuale (cioè l'ultimo selezionato con il comando [Un])
        [Pxyzw] dove xyzw sono 4 cifre intere;
        l'effetto sarà di prelevare la somma xyzw dal conto attuale (cioè l'ultimo selezionato con il comando [Un])
        [ S ] (senza spazi)
        l'effetto sarà di inviare al cliente il saldo depositato sul conto attuale (cioè l'ultimo selezionato con il comando [Un])
    risponda ERROR a ogni altro dato ricevuto dal cliente

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

public class server
{
private int saldo[];
private int current;
private ServerSocket server;
private Socket client;
private BufferedReader in;
private PrintWriter out;

public server()
{
saldo = new int[10];
current = 0;
}

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

public boolean caller(String cmd)
{
int len = cmd.length();

if (cmd.charAt(0) != '[' || cmd.charAt(len-1) != ']')
return false;

if (len == 4)
{
if (cmd.charAt(1) == 'U' && isInt(cmd.substring(2,3)))
{
funcU(cmd.substring(2,3));
return true;
}
else
return false;
}
else if (len == 7 && isInt(cmd.substring(2,6)))
{
if(cmd.charAt(1) == 'V')
{
funcV(cmd.substring(2,6));
return true;
}
else if (cmd.charAt(1) == 'P')
{
funcP(cmd.substring(2,6));
return true;
}
else
return false;
}
else if (len == 3)
{
if (cmd.charAt(1) == 'S')
{
funcS();
return true;
}
else
return false;
}

return false;
}

public void funcU(String cmd)
{
current = Integer.parseInt(cmd);
out.println("Conto attuale: "+current);
}

public void funcV(String cmd)
{
int x = Integer.parseInt(cmd);
saldo[current] += x;
out.println("Versati "+x+" sul conto "+current);
}

public void funcP(String cmd)
{
int x = Integer.parseInt(cmd);
saldo[current] -= x;
out.println("Prelevati "+x+" dal conto "+current);
}

public void funcS()
{
out.println("Saldo del conto "+current+": "+saldo[current]);
}

public void process()
{
try
{
server = new ServerSocket(12345);
System.out.println("Server ready (CTRL-C quits)");
while (true)
{
client = server.accept();
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())), true);

if (!caller(in.readLine()))
out.println("ERROR");
}
}
catch(Exception e)
{
e.printStackTrace();
}
}

public static void main(String[] args)
{
server srv = new server();
srv.process();
}
}

Quote
Seconda parte (facoltativa)
Scrivere un programma client che permetta di inviare comandi al server descritto.

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

public class client
{
public static void main(String[] args)
{
if (args.length != 1)
{
System.out.println("Utilizzo: java client [comando]\n");
return;
}

try
{
InetAddress address = InetAddress.getByName("localhost");
Socket client = new Socket(address, 12345);
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(client.getOutputStream())), true);
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));

out.println(args[0]);

System.out.println(in.readLine());

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


Al solito, se avete una soluzione migliore o consigli particolari siete i benvenuti.
« Last Edit: 19-12-2012, 17:52:36 by Shin » 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: