Pages: [1]   Go Down
Print
Author Topic: [RISOLTO] Esercizio 10  (Read 607 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
zElOtO
Forumista
***
Offline Offline

Gender: Male
Posts: 845



WWW
« on: 06-12-2012, 23:12:06 »

Quote
Implementare in 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 spazio)
      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

Io ho svolto così ed ho creato anche il Client che manda le operazioni...  pc
Il problema è che il Server riceve correttamente i comandi, ma il Client non scrive nello standard output la risposta del server, nonostante quest'ultimo la invii!
Ora funziona, sbagliavo il modo di leggere nel Client!


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

public class Server {
private static int db[] = new int[10];
private static int selected;
public static void main(String[] args) throws IOException {
for (int i = 0; i < 10; i++) { db[i] = 0; } //inizializzo db
System.out.println("Database avviato.");
ServerSocket server = new ServerSocket(7777);
System.out.println("Server in ascolto...");

Socket client = null;
client = server.accept();

//flusso input, dove riceviamo dal client
BufferedReader input = new BufferedReader(new InputStreamReader(client.getInputStream()));

//flusso output, dove rispondiamo al client
BufferedWriter outbuf = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
PrintWriter output = new PrintWriter(outbuf, true);

String current;
while(true) {
current = input.readLine();
System.out.println("Ricevuto comando: " + current);
output.println(makeOperation(current));
}
//System.out.println("Server chiuso.");
}
public static String makeOperation(String current) {
char operation = current.charAt(0);
String risposta = "ERROR";
if (operation == 'U') { //seleziona conto
selected = Integer.parseInt(String.valueOf(current.charAt(1)));
risposta = "Stai operando sul conto: " + selected;
}
else if (operation == 'V') { //versa
int importo = Integer.parseInt(current.substring(1, current.length()));
db[selected] += importo;
risposta = "Hai versato sul conto " + selected + ": " + importo;
}
else if (operation == 'P') { //preleva
int importo = Integer.parseInt(current.substring(1, current.length()));
if (db[selected] >= importo) {
db[selected] -= importo;
risposta = "Hai prelevato dal conto " + selected + ": " + importo;
}
else {
risposta = "Non puoi prelevare " + importo + " dal conto " + selected + ". Totale conto: " + db[selected];
}
}
else if (operation == 'S') { //estratto conto
risposta = "Il saldo totale del conto " + selected + " è: " + db[selected];
}
return risposta;
}
}

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

public class Client {
public static void main(String[] args) throws IOException {
InetAddress addr = InetAddress.getByName("localhost");
Socket client = new Socket(addr, 7777);

//flusso output, dove inviamo al server
BufferedWriter outbuff = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
PrintWriter output = new PrintWriter(outbuff, true);

//creazione stream di input da tastiera e dell'input dal server
BufferedReader input = new BufferedReader(new InputStreamReader(client.getInputStream()));
BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
String userInput;
System.out.println("Digitare l'operazione.");

while (true){
userInput = stdIn.readLine();
output.println(userInput);
System.out.println(input.readLine());
if (userInput.equals("END")) break;
}
System.out.println("Connessione chiusa.");
}
}
« Last Edit: 07-12-2012, 02:27:55 by zElOtO » Logged

I computer sono incredibilmente veloci, accurati e stupidi. Gli uomini sono incredibilmente lenti, inaccurati e intelligenti. Insieme sono una potenza che supera l'immaginazione. (A. Einstein)

Damiano Cancemi
www.damianocancemi.com
www.nerdbren.com
www.nerdbren.com/blog
Pages: [1]   Go Up
Print
Jump to: