Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2012
    Messaggi
    1

    Problema comunicazione client server

    Salve a tutti,
    ho un problema in un applicazione client-server.Il client invia una fotografia al server e il server risponde con un messaggio di risposta. Vi posto il codice...
    Server:
    codice:
    public class Server {
    
    	public static void main(String[] args) throws Exception {
    
    		String response="response";
    		ServerSocket socket = new ServerSocket(3333);
            while (true) {
    
                Socket clientSocket = socket.accept();
    
                DataInputStream dis = new DataInputStream(clientSocket.getInputStream());
                FileOutputStream fout = new FileOutputStream("output.jpg");
                int i;
                while ( (i = dis.read()) > -1) 
                    fout.write(i);    
                
                DataOutputStream outToClient= new   DataOutputStream(clientSocket.getOutputStream());
               
                outToClient.writeBytes(response);
     
    	        fout.flush();
                fout.close();
                dis.close();
                outToClient.close();
                clientSocket.close();
            }
    	}
    }
    Client:
    codice:
    public static void main(String[] args) throws Exception {
    		// TODO Auto-generated method stub
    
    		String sentence;
    		int i;
    	    FileInputStream fis = new FileInputStream ("pathphoto.jpg");   
    	   Socket sock = new Socket ("hostname",3333);
    	    DataOutputStream os = new DataOutputStream(sock.getOutputStream());
    	    System.out.println("Sending....");
    	    while ((i = fis.read()) > -1)
    	        os.write(i);
    	    
    	   	BufferedReader inFromServer= new BufferedReader(new InputStreamReader(sock.getInputStream()));
    		sentence=inFromServer.readLine();
    		System.out.println("FROM SERVER: " + sentence);
    		fis.close();
    	    os.close();
    	    sock.close();
    	}
    
    }
    Il problema è che il client non riceve la risposta dal server e credo che sia in queste righe:
    codice:
    BufferedReader inFromServer= new BufferedReader(new InputStreamReader(sock.getInputStream()));
    		sentence=inFromServer.readLine();
    poichè senza di queste il server invia la risposta, però poi non posso visualizzarla a video nel client. Qualche consiglio su come risolvere il problema ? Grazie

  2. #2

    Problema con le classi

    Salve,
    penso che il problema sia sicuramente nel server!.

    La chiusura del canale porta ad un errore di tipo -1 e tu il canale lo chiudi solo alla fine.
    Inoltre ti consiglio di utilizzare un protocollo minimo sul lato trasporto ti elimini molti problemi.

    Il server si ferma nell'attesa che qualcuno chiuda la connessione mentre il client si mette
    in attesa di ricevere dei dati e quindi la comunicazione si ferma!!

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    1,123
    Ti ho scritto 2 righe veloci di esempio:

    Ho gestito il numero di client connessi tramite una classe esterna per comodità:

    ClientN.java
    codice:
    class ClientN {
      static int n;
      
      static {
        n = 0;
      }
    }
    Client.java

    codice:
    import java.io.*;
    import java.net.*;
    
    class Client {
      public static void main(String[] args) {
        ObjectInputStream ois = null;
        ObjectOutputStream oos=null;
        
        try {
          Socket socket = new Socket("127.0.0.1",6354);
          while(true) {
            oos = new ObjectOutputStream(socket.getOutputStream());
            oos.writeObject(new String("Client"));
            
            ois = new ObjectInputStream(socket.getInputStream());
            String testo = (String) ois.readObject();
            System.out.println("Testo ricevuto dal server: "+testo);
          }
        } catch(Exception e) {}
        finally {
          try {
            oos.close();
            ois.close();
          } catch(Exception e) {}
        }
      }
    }
    Server.java
    codice:
    import java.net.*;
    import java.io.*;
    
    class Server {
      public static void main(String[] args) {
        Socket socket;
        ServerSocket ss = null;
        
        ObjectInputStream ois = null;
        ObjectOutputStream oos = null;
        
        try {
          ss = new ServerSocket(6354);
          
          while(true) {
            socket = ss.accept();
            System.out.print("Nuovo Client Connesso.\nMessaggio del Client: ");
            ois = new ObjectInputStream(socket.getInputStream());
            String testo = (String) ois.readObject();
            System.out.println(testo);
            
            oos = new ObjectOutputStream(socket.getOutputStream());
            oos.writeObject(new String("Benvenuto "+ClientN.n+"\r\n"));
            ClientN.n++;
          }
        } catch(Exception e){}
          finally {
            try {
              ss.close();
              oos.close();
              ois.close();
            } catch(Exception e) {}
          }
      }
    }
    Io tratto i flussi come oggetti, quindi puoi passare da uno String come in questo caso, ad un tuo oggetto creato ad hoc.
    Se hai domande poni pure. ^^

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.