Salve. è la prima volta che scrivo in questo sito e da un po di settimane sto cercando di imparare a programma da solo, quindi guardando video o leggendo qualche manuale. Ho trovato un esercizio su un sito: -Scrivere un’applicazione java che svolga la seguente elaborazione:
CLIENT
invia dei dati al server: l’invio dei dati termina quando viene inviato un valore finale (es. END).I dati sono letti da tastiera (come flussi di byte) e, per poter essere elaborati dal server, devono rappresentare dei numeri interi: quindi, ad esempio, il dato 123 sarà un dato valido, mentre il dato 1A2 dovrà essere scartato dal server.
SERVER
Il server effettuerà la seguente elaborazione sui dati ricevuti dal client: Calcolo della media dei valori introdotti, conteggio del numero di dati validi tra quelli ricevuti dal client, conteggio del numero di dati scartati. Il risultato delle elaborazioni dovrà essere inviato al server
Allora io sono riuscito ho fatto due classi, una server e una client e ho scritto questo
codice:
import java.io.*;
import java.net.*;
public class Client {
public static void main(String[] args) {
String server = "localhost";
Socket connessione = null;
BufferedReader sIN = null, stdIn = null;
PrintWriter sOUT = null;
try { // crea il socket
connessione = new Socket(server, ServerClient.PORT);
System.out.println("echoclient: started");
System.out.println("CLIENT SOCKET"+connessione );
System.out.println(); // crea stream di input da SOCKET
InputStreamReader input = new InputStreamReader(connessione.getInputStream()) ;
sIN = new BufferedReader(input); // crea stream di output su Socket OutputStreamWriter osw = new OutputStreamWriter (connessione.getOutputStream() ); BufferedWriter bw = new BufferedWriter (osw);
sOUT = new PrintWriter(bw,true); // crea stream di input da tastiera
stdIn = new BufferedReader(new InputStreamReader(System.in));
String Dato; //legge da tastiera, invio al server
while(true) {
Dato = stdIn.readLine();
sOUT.println(Dato);
if (Dato.equals("END"))break;
System.out.println("echo" + sIN.readLine());
} //CHIUDO STREAM E SOCKET
System.out.println("closing...");
sIN.close();
stdIn.close();
stdIn.close();
connessione.close();
}
catch(IOException e) {
System.err.println("errore");
System.exit(1); } }
Codice:
import java.io.*;
import java.net.*;
public class ServerClient {
public static final int PORT = 1050;
/** * @param args the command line arguments */
public static void main(String[] args) throws IOException {
ServerSocket sSocket = new ServerSocket(PORT);;
System.out.println("start");
System.out.println("SERVER SOCKET: " +sSocket );
Socket connessione =null;
BufferedReader sIN = null;
PrintWriter sOUT = null;
try { // bloccante finche non avviene una connessione
connessione = sSocket.accept();
System.out.println("connessione stabilita..."+connessione); // crea stream di input da clientSocket InputStreamReader input = new InputStreamReader (connessione.getInputStrea() );
sIN = new BufferedReader(input); // crea stream di output da clientSocket OutputStreamWriter osw = new OutputStreamWriter (connessione.getOutputStream() ); BufferedWriter bw = new BufferedWriter (osw);
sOUT = new PrintWriter(bw,true); // ciclo di ricezione dal client e invio di risposta // finchè il client manda la stringa "END" .... e si termina
while(true) {
String str = sIN.readLine();
if (str.equals("END"))break;
sOUT.println(str); } }
catch(IOException e) {
System.err.println("errore");
System.exit(1); } //CHIUDO STREAM E SOCKET
System.out.println("closing...");
sOUT.close();
sIN.close();
connessione.close();
sSocket.close(); } }
Adesso il problema è che non riesco a fare la media aritmetica tra i due numeri, so che per voi può essere facile ma io sono appena agli inizi e come studio da solo non ho nessuno a cui fare domande.. vi chiedo quindi di darmi un aiuto a finire questo programma, è da tutto il giorno che ci provo.. Grazie