Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [Java] BufferedWriter e DataOutputStrem differenze

    ciao a tutti,

    sto cercando di capire il funzionamento di una semplice applicazione client server. in teoria è tutto chiaro, nella pratica quel che non capisco è la differenza nell'uso delle due classi BufferedWriter e DataOutputStream.

    tutti gli esempi che si trovano sulla rete riportano l'uso delle classi DataInput* e DataOutput* solo che il metodo readLine() di dataInputStream è "deprecated" cosi l'ho sostituito con l'equivalente della BufferedReader e fin qui tutto ok.

    Il problema sorge quando decido di provare a usare un oggetto BufferedWriter nel client per inviare una stringa col metodo write(Strnga);
    la cosa incredibile è che se invio con lo stesso metodo della classe BufferedWriter una stringa DAL server AL client funziona!

    riporto il codice!
    grazie a tutti!

    codice:
    Server:
    
    import java.net.*;
    import java.io.*;
    
       public class Server  {
          public void start() throws IOException {
             ServerSocket serverSocket = new ServerSocket(7777);
    
       
             InetAddress indirizzo = serverSocket.getInetAddress();
             String server = indirizzo.getHostAddress();
             int port = serverSocket.getLocalPort();
            
    	 System.out.println("In ascolto Server: "+ server + " porta: " + port);
    
                 System.out.println("In attesa di chiamate dai Client... ");
                 Socket socket = serverSocket.accept();
    
                
    
                 
       
    		BufferedReader is = new BufferedReader( new InputStreamReader(socket.getInputStream()));
    		BufferedWriter os = new BufferedWriter( new OutputStreamWriter(socket.getOutputStream()));
                 
                     String userInput = is.readLine();
                      
           		os.write(userInput + '\n');
    	
    	            System.out.println("Il Client ha scritto: " + userInput);
                   
                
                 os.close();
                 is.close();
                 socket.close();
              
        	 }
          public static void main (String[] args) throws Exception {
                Server tcpServer = new Server();
                tcpServer.start();
          }
       }
    codice:
    client:
    
    
    
    import java.net.*;
    import java.io.*;
    
    public class Client {
        public void start()throws IOException {
           
            Socket socket = new Socket("localhost", 7777);
    
            DataOutputStream os = new DataOutputStream(socket.getOutputStream());
       //     DataInputStream is = new DataInputStream(socket.getInputStream());
    
    
    //	BufferedWriter os = new BufferedWriter ( new OutputStreamWriter ( socket.getOutputStream())); 
    	BufferedReader is = new BufferedReader ( new InputStreamReader ( socket.getInputStream()));
    
            BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
            
    
           
            
               String userInput = stdIn.readLine();
              
              os.writeBytes(userInput + '\n');
       //   	     os.write(userInput + '\n');	
    
    	     System.out.println("Hai digitato: " + is.readLine());
          
    
            
            os.close();
            is.close();
            socket.close();
       }
        public static void main (String[] args) throws Exception {
            Client tcpClient = new Client();
            tcpClient.start();
       }
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    il codice manca comunque di una cosa fondamentale:

    os.write, di qualsiasi natura (ma vado a memoria, per cui potrei benissimo sbagliarmi), non garantisce che i dati nello stream siano effettivamente mandati all'output per intero. Ossia potresti trovarti col programma apparentemente a fine stream ed il buffer ancora pieno zeppo di roba. Si sistema aggiungendo un flush allo stream prima di chiuderlo. flush invece garantisce che qualsiasi cosa possa essere rimasta nello stream venga effettivamente inviata.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

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.