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

    [java] configurazion proxy tra client -server

    Salve ragazzi urge il vostro aiuto..
    Devo completare un progetto che mi chiede di creare un sensore che comunica con un server e fa le seguenti operazioni:

    -CLIENT-SERVER il compito è quello di inviare interamente un file dal lato client al lato server

    -Fra CLIENT-SERVER dobbiamo frapporre un Proxy TCP ovvero Dobbiamo interfacciare con esso i lati client e server

    Io ho creato il client, il server e il proxy, ma non riesco a collegarli l'uno con l'altro.
    Qualcuno può aiutarmi??
    Ovviamente se avete qualcosa di pronto è ben accetto!!

    CLIENT
    codice:
    package progettois;
    
    // PutFileClient.java
    import java.io.*;
    import java.net.InetAddress;
    import java.net.Socket;
    import java.net.SocketTimeoutException;
    
    public class PutFileClient {
    
        public static void main(String[] args) throws IOException {
            /*
             * Come argomenti si devono passare un nome di host valido e una porta
             *
             */
            InetAddress addr = null;
            int port = -1;
    
            /*
             * controllo argomenti
             */
            try {
                if (args.length == 2) {
                    addr = InetAddress.getByName(args[0]);
                    port = Integer.parseInt(args[1]);
                } else {
                    System.out.println("Usage: java PutFileClient serverAddr serverPort");
                    System.exit(1);
                }
            } //try
            // Per esercizio si possono dividere le diverse eccezioni
            catch (Exception e) {
                System.out.println("Problemi, i seguenti: ");
                System.out.println("Usage: java PutFileClient serverAddr serverPort");
                System.exit(2);
            }
    
            // oggetti utilizzati dal client per la comunicazione e la lettura del file
            // locale
            Socket socket = null;
            FileInputStream inFile = null;
            DataInputStream inSock = null;
            DataOutputStream outSock = null;
    
            /*
             * comunicazione col cliente, da console
             */
            // creazione stream di input da tastiera
            BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
            String nomeFile = "/Users/Elena/Desktop/Prova.rtf";
    
            try {
                while ((nomeFile = stdIn.readLine()) != null) {
    
                    // se il file esiste creo la socket
                    if (new File(nomeFile).exists()) {
                        // creazione socket
                        try {
                            socket = new Socket(addr, port);
                            // setto il timeout per non bloccare indefinitivamente il client
                            socket.setSoTimeout(30000);
                            System.out.println("Creata la socket: " + socket);
                        } catch (Exception e) {
                            System.out.println("Problemi nella creazione della socket: ");
                            continue;
                            // il client continua l'esecuzione riprendendo dall'inizio del ciclo
                        }
    
                        // creazione stream di input/output su socket
                        try {
                            inSock = new DataInputStream(socket.getInputStream());
                            outSock = new DataOutputStream(socket.getOutputStream());
                        } catch (IOException e) {
                            System.out.println("Problemi nella creazione degli stream su socket: ");
                            continue;
                            // il client continua l'esecuzione riprendendo dall'inizio del ciclo
                        }
                    } // se la richiesta non � corretta non proseguo
                    else {
                        System.out.println("File non presente nel direttorio corrente");
                        // il client continua l'esecuzione riprendendo dall'inizio del ciclo
                        continue;
                    }
    
                    /*
                     * Invio file richiesto e attesa esito dal server
                     */
                    // creazione stream di input da file
                    try {
                        inFile = new FileInputStream(nomeFile);
                    } /*
                     * abbiamo gia' verificato che esiste, a meno di inconvenienti,
                     * es. cancellazione concorrente del file da parte di un altro
                     * processo, non dovremmo mai incorrere in questa eccezione.
                     */ catch (FileNotFoundException e) {
                        System.out.println("Problemi nella creazione dello stream di input da "
                                + nomeFile + ": ");
                        // il client continua l'esecuzione riprendendo dall'inizio del ciclo
                        continue;
                    }
    
                    // trasmissione del nome
                    try {
                        outSock.writeUTF(nomeFile);
                        System.out.println("Inviato il nome del file " + nomeFile);
                    } catch (Exception e) {
                        System.out.println("Problemi nell'invio del nome di " + nomeFile
                                + ": ");
                        // il client continua l'esecuzione riprendendo dall'inizio del ciclo
                        continue;
                    }
    
                    System.out.println("Inizio la trasmissione di " + nomeFile);
    
                    // trasferimento file
                    try {
                        //FileUtility.trasferisci_a_linee_UTF_e_stampa_a_video(new DataInputStream(inFile), outSock);
                        FileUtility.trasferisci_a_byte_file_binario(new DataInputStream(inFile), outSock);
                        // chiusura della socket e del file
                        inFile.close();
                        // chiudo la socket in upstream, cioe' invio l'EOF al server
                        socket.shutdownOutput();
                        System.out.println("Trasmissione di " + nomeFile + " terminata ");
                    } catch (SocketTimeoutException ste) {
                        System.out.println("Timeout scattato: ");
                        socket.close();
                        // il client continua l'esecuzione riprendendo dall'inizio del ciclo
                        continue;
                    } catch (Exception e) {
                        System.out.println("Problemi nell'invio di " + nomeFile + ": ");
                        socket.close();
                        // il client continua l'esecuzione riprendendo dall'inizio del ciclo
                        continue;
                    }
    
                    // ricezione esito
                    String esito;
                    try {
                        esito = inSock.readUTF();
                        System.out.println("Esito trasmissione: " + esito);
                        // chiudo la socket in downstream
                        socket.shutdownInput();
                        System.out.println("Terminata la chiusura della socket: " + socket);
                    } catch (SocketTimeoutException ste) {
                        System.out.println("Timeout scattato: ");
                        socket.close();
                        // il client continua l'esecuzione riprendendo dall'inizio del ciclo
                        continue;
                    } catch (Exception e) {
                        System.out.println("Problemi nella ricezione dell'esito, i seguenti: ");
                        socket.close();
                        continue;
                        // il client continua l'esecuzione riprendendo dall'inizio del ciclo
                    }
    
                    // tutto ok, pronto per nuova richiesta
    
                }// while
                System.out.println("PutFileClient: termino...");
            } // qui catturo le eccezioni non catturate all'interno del while
            // quali per esempio la caduta della connessione con il server
            // in seguito alle quali il client termina l'esecuzione
            catch (Exception e) {
                System.err.println("Errore irreversibile, il seguente: ");
                System.err.println("Chiudo!");
                System.exit(3);
            }
    
        } // main
    } // PutFileClient

  2. #2

    ecco il Server e il Proxy

    SERVER
    codice:
    package progettois;
    
    // PutFileServer Sequenziale
    
    import java.io.*;
    import java.net.*;
    
    public class PutFileServerSeq {
      // porta al di fuori del range 1-1024!
      // dichiarata come statica perch� caratterizza il server
      public static final int PORT = 54321;
    
      /**
       * Main invocabile con 0 o 1 argomenti. Argomento possibile -> porta su cui il
       * server ascolta.
       *  
       */
      public static void main(String[] args) throws IOException {
        // Porta sulla quale ascolta il server
        int port = -1;
    
        /* controllo argomenti */
        try {
          if (args.length == 1) {
            port = Integer.parseInt(args[0]);
            // controllo che la porta sia nel range consentito 1024-65535
            if (port < 1024 || port > 65535) {
              System.out.println("Usage: java LineServer [serverPort>1024]");
              System.exit(1);
            }
          } else if (args.length == 0) {
            port = PORT;
          } else {
            System.out
                .println("Usage: java PutFileServerSeq or java PutFileServerSeq port");
            System.exit(1);
          }
        } //try
        catch (Exception e) {
          System.out.println("Problemi, i seguenti: ");
          e.printStackTrace();
          System.out
              .println("Usage: java PutFileServerSeq or java PutFileServerSeq port");
          System.exit(1);
        }
    
        /* preparazione socket e in/out stream */
        ServerSocket serverSocket = null;
        try {
          serverSocket = new ServerSocket(port,2);
          serverSocket.setReuseAddress(true);
          System.out.println("PutFileServerSeq: avviato ");
          System.out.println("Creata la server socket: " + serverSocket);
        }
        catch (Exception e) {
          System.err.println("Problemi nella creazione della server socket: "
              + e.getMessage());
          e.printStackTrace();
          System.exit(2);
        }
        try {
          while (true) {
            Socket clientSocket = null;
            DataInputStream inSock = null;
            DataOutputStream outSock = null;
    
            System.out.println("\nIn attesa di richieste...");
            try {
              // bloccante finch� non avviene una connessione
             clientSocket = serverSocket.accept();
              // visto che il server � sequenziale se si bloccasse indefinitamente
              // sull'unica socket da cui fornisce il servizio, il servizio sarebbe
              // ospeso, quindi e' meglio mettere un timeout scaduto il quale
              // tornare
              // in attesa di richieste
              clientSocket.setSoTimeout(30000);
              System.out.println("Connessione accettata: " + clientSocket + "\n");
            }
            catch (SocketTimeoutException te) {
              System.err
                  .println("Non ho ricevuto nulla dal client per 30 sec., interrompo "
                      + "la comunicazione e accetto nuove richieste.");
              // il server continua a fornire il servizio ricominciando dall'inizio
              continue;
            }
            catch (Exception e) {
              System.err.println("Problemi nella accettazione della connessione: "
                  + e.getMessage());
              e.printStackTrace();
              // il server continua a fornire il servizio ricominciando dall'inizio
              // del ciclo, se ci sono stati problemi
              continue;
            }
            try {
              // creazione stream di input e out da socket
              inSock = new DataInputStream(clientSocket.getInputStream());
              outSock = new DataOutputStream(clientSocket.getOutputStream());
            }
            catch (IOException e) {
              System.out
                  .println("Problemi nella creazione degli stream di input/output "
                      + "su socket: ");
              e.printStackTrace();
              // il server continua l'esecuzione riprendendo dall'inizio del ciclo
              continue;
            }
            /* ricezione file */
            String nomeFile;
            // ricezione del nome
            try {
              nomeFile = inSock.readUTF();
            }
            catch(SocketTimeoutException ste){
              System.out.println("Timeout scattato: ");
              ste.printStackTrace();
              clientSocket.close();
              System.out
                  .print("\n^D(Unix)/^Z(Win)+invio per uscire, solo invio per continuare: ");
              // il client continua l'esecuzione riprendendo dall'inizio del ciclo
              continue;          
            }        
            catch (Exception e) {
              System.out.println("Problemi nella ricezione del nome del file: ");
              e.printStackTrace();
              // servo nuove richieste
              continue;
            }
            FileOutputStream outFile = null;
            String esito;
            if (nomeFile == null) {
              System.out.println("Problemi nella ricezione del nome del file: ");
              continue;
            } else {
              // controllo se il file esiste, se non esiste lo creo, altrimenti
              // torno errore
              File curFile = new File(nomeFile);
              if (curFile.exists()) {
                try {
                  esito = "Sovrascritto file esistente";
                  // distruggo il file da sovrascrivere
                  curFile.delete();
                }
                catch (Exception e) {
                  System.out.println("Problemi nella notifica di file esistente: ");
                  e.printStackTrace();
                  // servo nuove richieste
                  continue;
                }
              } 
              else esito = "Creato nuovo file";
              outFile = new FileOutputStream(nomeFile);
            }
            //ciclo di ricezione dal client, salvataggio file e stamapa a video
            try {
              System.out.println("Ricevo il file " + nomeFile + ": \n");
              FileUtility.trasferisci_a_byte_file_binario(inSock,
                  new DataOutputStream(outFile));
              System.out.println("\nRicezione del file " + nomeFile
                  + " terminata\n");
              // chiusura file
              outFile.close();
              // chiusura socket in downstream
              clientSocket.shutdownInput();
              // ritorno esito positivo al client
              outSock.writeUTF(esito + ", file salvato lato server");
              // System.out.println("\nTerminata connessione con "+clientSocket);
              // chiudo la socket anche in upstream
              clientSocket.shutdownOutput();
              System.out.println("\nTerminata connessione con " + clientSocket);
            }
            catch(SocketTimeoutException ste){
              System.out.println("Timeout scattato: ");
              ste.printStackTrace();
              clientSocket.close();
              System.out
                  .print("\n^D(Unix)/^Z(Win)+invio per uscire, solo invio per continuare: ");
              // il client continua l'esecuzione riprendendo dall'inizio del ciclo
              continue;          
            }        
            catch (Exception e) {
              System.err
                  .println("\nProblemi durante la ricezione e scrittura del file: "
                      + e.getMessage());
              e.printStackTrace();
              clientSocket.close();
              System.out.println("Terminata connessione con " + clientSocket);
              continue;
              // il server continua a fornire il servizio ricominciando
              // dall'inizio del ciclo esterno
            }
          } // while (true)
        }
        // qui catturo le eccezioni non catturate all'interno del while
        // in seguito alle quali il server termina l'esecuzione
        catch (Exception e) {
          e.printStackTrace();
          // chiusura di stream e socket
          System.out.println("Errore irreversibile, PutFileServerSeq: termino...");
          System.exit(3);
        }
      } // main
    
    } // PutFileServerSeq
    PROXY
    codice:
    package progettois;
    
    import java.io.BufferedOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.net.UnknownHostException;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    
    
    public class Proxy {
    
    public static final int listenPort = 465, // port to listen on
            remotePort = 465;   // port to connect to
    public static final String remoteH = "";// my mail server hostname here
    
    public static void main(String[] args) {
        ExecutorService tm = Executors.newCachedThreadPool();
        try {
            ServerSocket ss = new ServerSocket(listenPort);
            while (true) {
                try {
                    Socket client = ss.accept();
                    tm.submit(new ProxyWorkerImpl(client));
                } catch (Exception e) {
                    System.out.println("error " + e);
                }
            }
        } catch (Exception e) {
            System.out.println("error " + e);
        }
    }
    
        private static class ProxyWorkerImpl extends ProxyWorker {
    
            public ProxyWorkerImpl(Socket c) {
                super(c);
            }
    
            @Override
            public void run() {
                throw new UnsupportedOperationException("Not supported yet.");
            }
        }
    }
    
    abstract class ProxyWorker implements Runnable {
    
    Socket client, server;
    OutputStream serverOut = null, clientOut = null;
    InputStream serverIn = null, clientIn = null;
    
    
    ProxyWorker(Socket c) {
            try {
                client = c;
                server = new Socket(Proxy.remoteH, Proxy.remotePort);
                serverOut = server.getOutputStream();
                serverIn = server.getInputStream();
    
    
                clientOut = client.getOutputStream();
                clientIn = client.getInputStream();
            } catch (UnknownHostException ex) {
                Logger.getLogger(ProxyWorker.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(ProxyWorker.class.getName()).log(Level.SEVERE, null, ex);
            }
    catch (Exception e) {
    System.out.println("error\n" + e.toString());
    System.exit(0);
    
    }
    
    
    }
    
    
        @Override
    public void run() {
        System.out.println("listening runner activated");
        try {
           //the assigned value is never used?
            byte[] b;
            BufferedOutputStream bos = new BufferedOutputStream(System.out);
            while (true) {
                int clientReady = clientIn.available();
                while (clientReady > 0) {
                    b = new byte[clientReady];
                    clientIn.read(b, 0, clientReady);
                    serverOut.write(b);
                    bos.write(b);
                    bos.flush();
                    clientReady = clientIn.available();
                }
                Thread.sleep(100);
                int serverReady = serverIn.available();
                while (serverReady > 0) {
                    b = new byte[serverReady];
                    serverIn.read(b, 0, serverReady);
                    clientOut.write(b);
                    bos.write(b);
                    bos.flush();
                    serverReady = serverIn.available();
                }
                if(server.isClosed()||client.isClosed()){
                    break;
                }
            }
        } catch (NullPointerException e) {
            System.err.println("NPE:\n"+e.getMessage());
            System.err.println(e.toString());
        } catch (Exception e) {
            System.out.println(e);
        } finally {
            try {
                server.close();
                client.close();
            } catch (IOException ex) {
                System.out.println("could not close sockets");
            }
        }
        System.out.println("Thread Exiting Now");
    }
    }

  3. #3
    lì è un problema di porte...se metti porte a casaccio è come se parlassi con un cinese in lingua ucraina...
    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

  4. #4
    ma mi sai dire che valori devo modificare per essere tutti sulla stessa porta??

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.