Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2014
    Messaggi
    2

    Programmazione client-server in java

    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.getInputStream() );
          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
    Ultima modifica di LeleFT; 19-12-2014 a 18:15 Motivo: Aggiunti i tag CODE

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,317
    Java ha una sezione dedicata. Sposto la discussione.
    Inoltre, il codice va postato all'interno degli appositi tag [CODE] ... [/CODE], in modo da mantenere formattazione ed indentazione e renderlo, quindi, più leggibile. Aggiungo io i tag.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2014
    Messaggi
    2
    Ah grazie non lo sapevo

  4. #4
    In poche parole ci stai chiedendo di farti il "succo" dell'esercizio...
    Cmq non ti scriverò codice (se non sarebbe troppo facile) ma ti spiego come potresti procedere.
    1) Acquisisci la Stringa che ti manda il client (lo fai gia con String str = sIN.readLine();)
    2) Controlli la Stringa che non contega Lettere (Aiuto Integer.parseInt)
    2-a) La Stringa non è un numero aumenti di uno il contatore di stringhe non valide
    2-b) La Stringa è un numero aumenti di uno il contatore di stringhe valide e sommi questo valore (int somma =0; somma += numeroLetto)
    3) ricievuta la stringa END a questo punto per calcolarti la media ti basta fare somma / contatore numeri validi.

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.