Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305

    Blocco quando creo ObjectInputStream

    Salve ragazzi a volte quando mi collego al server questo codice si blocca sulla riga commentata, ho fatto anche il debug ma non succede nulla , praticamente si ferma su quella riga e non va più avanti. Sapreste aiutarmi ?
    codice:
    public void connect(Credenziali login)
                throws java.net.ConnectException,
                IOException {
            Properties prop = new Properties();
    
    
            try (FileInputStream fis = new FileInputStream("settings.properties")) {
                prop.load(fis);
            }
            String addressIp = prop.getProperty("serverAddress");
    
    
            this.address = InetAddress.getByName(addressIp);
            this.socket = new Socket(address.getHostAddress(), this.serverPort);
            String percorso = "//Users//Linux//Documents//NetBeansProjects//jCallRememberServer//database.properties";
            String indirizzoRisorsa = "//" + addressIp + percorso;
       
    
    
            try (FileInputStream inputStreamRisorsa = new FileInputStream(new File(indirizzoRisorsa))) {
                Properties propRisorsaRemota = new Properties();
                propRisorsaRemota.load(inputStreamRisorsa);
                prop.setProperty("orarioMattinaInizio",propRisorsaRemota.getProperty("orarioMattinaInizio"));
                prop.setProperty("orarioMattinaFine", propRisorsaRemota.getProperty("orarioMattinaFine"));
                prop.setProperty("orarioPomeriggioInizio", propRisorsaRemota.getProperty("orarioPomeriggioInizio"));
                prop.setProperty("orarioPomeriggioFine", propRisorsaRemota.getProperty("orarioPomeriggioFine"));
                try (FileOutputStream fos = new FileOutputStream("settings.properties")) {
                    prop.store(fos, null);
                }
            }
            Boolean isConnect;
            this.os = this.socket.getOutputStream();
            this.is = this.socket.getInputStream();
            this.oos = new ObjectOutputStream(this.os);
            this.ois = new ObjectInputStream(this.is); //si blocca qui
            oos.writeObject(login);
            oos.flush();
            
    
    
            isConnect = ois.readBoolean();
            if (!isConnect) {
                throw new java.net.ConnectException("Username o Password"
                        + " inesatte!");
            } else {
                
                this.user_and_pass = login;
                this.chatSocket = new Socket(address.getHostAddress(), 40001);
                OutputStream oschat = chatSocket.getOutputStream();
                BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(oschat));
                bw.write(login.getUsername() + "\n");
                bw.flush();
                
            }
        }
    Per poter poi far funzionare tutto devo chiudere il server e avviarlo di nuovo

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Una possibile causa che mi viene in mente è dovuta all'ordine di apertura degli stream.
    Quando si ha a che fare con connessioni di rete, è essenziale fare attenzione all'ordine di apertura degli stream: il client ed il server li devono aprire in ordine inverso l'uno dall'altro.

    Quindi, nel tuo client stai aprendo, nell'ordine, prima l'OutputStream e poi l'InputStream:


    codice:
    this.os = this.socket.getOutputStream();
    this.is = this.socket.getInputStream();

    Bene: il server deve fare esattamente il contrario (cioè, aprire prima l'InputStream e poi l'OutputStream) altrimenti 9 volte su 10 il client si pianterà.

    Verifica questa cosa.


    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 L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Io credo, se ben ricordo, che il problema è dovuto all'ordine degli ObjectXXXStream. In questo post c'era lo stesso problema e avevo risposto nel post seguente.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2014
    Messaggi
    305
    QUesto è il server ma mi pare che sta cosa sia gia fatta.
    codice:
    /**
         * Costruttore di classe. Prende come argomento l'oggetto socket su cui il
         * client richiederà operazioni.
         *
         * @param socket
         * @throws IOException
         */
        public ServerWorker(Socket socket) throws IOException {
            this.socket = socket;
            this.worker = new Thread(this);
            this.is = this.socket.getInputStream();
            this.os = this.socket.getOutputStream();
            this.ois = new ObjectInputStream(is);
            this.oos = new ObjectOutputStream(this.os);
            this.lock = new ReentrantLock();
            this.condition = lock.newCondition();
        }

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Io credo, se ben ricordo, che il problema è dovuto all'ordine degli ObjectXXXStream. In questo post c'era lo stesso problema e avevo risposto nel post seguente.

    Sì, corretto... erano gli ObjectXXXStreams e non gli Input/Output Stream della socket...


    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

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 © 2026 vBulletin Solutions, Inc. All rights reserved.