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

    Problema ObjectInputStream e ObjectOutputStream

    Allora, devo creare un sisteam client/server e per farlo utilizzo 3 classi:
    CollabServer che rappresenta il server
    CollabHandler che gestisce una singola connessione di un utente
    ServizioCinema che rappresenta il client

    Ho passato la fase di compilazione, il server accetta conessioni ma quando la conessione avviene sia il server che il client si bloccano sulla creazione dell'ObjectInputStream e dell'ObjectOutputStream.

    non riesco a capire perchè!

    questa è la classe che dovrebbe gestire la singola connessione

    collabhandler:

    codice:
    package serverclientprova;
    
    import java.net.*;
    import java.io.*;
    import java.util.*;
    import java.awt.*;
    // import prominence.msg.*; ?????
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    
    
    public class CollabHandler extends Thread {
        protected Socket socket;
        protected ObjectInputStream ois;
        protected ObjectOutputStream oos;
        protected CollabServer S;
            
        //--------------------------------------------------
        public CollabHandler(Socket socket, CollabServer CS) throws IOException {
           S = CS;
           this.socket = socket;
           try{
              System.out.println("qui arriva 1");
                ois = new ObjectInputStream(socket.getInputStream());
                 System.out.println("qui non arriva 2");
                oos = new ObjectOutputStream(socket.getOutputStream());
           }catch (IOException e) {
                System.out.println("QuestaIO Exception" + "\n");
            }
           start();
        }
    
    .
    .
    ...
    Questa è la classe che idealizza il server

    CollabServer:

    codice:
    package serverclientprova;
    
    import java.net.*;
    import java.io.*;
    import java.util.*;
    
    public class CollabServer {
    //--------------------------------------------------
    protected static FilmInProg [] vFiP;
    protected String info = "";
    protected BufferedReader bis;
    protected BufferedWriter bos;
    protected int nM;
    
    
        public CollabServer() throws IOException {
            MemorizzaFile();
            nM = ContaMatrici();
            vFiP = new FilmInProg [nM];
            CreaVettore();
            ServerSocket server = new ServerSocket(1414);
            
            System.out.println ("Accepting connections...");
            while(true) {
                Socket client = server.accept();  //ogni richiesta di connessione  viene accettata
                System.out.println ("Accepted from " + client.getInetAddress());
                try{
                new CollabHandler(client, this);
                }catch(IOException e){
                    System.out.println("IO Exception" + "\n");   
               }//Istanziamo un oggetto CollabHandler per gestire la connessione        }
            }
       }
    .
    .
    ...
    lo stesso errore lo da anche in ServizioCinema (il client):

    codice:
    package clientserverprova;
    
    
    import java.io.*;
    import java.awt.*;
    import java.net.*;
    //import prominence.msg.*;
    import java.util.logging.Level;
    import java.util.logging.Logger;
    
    public class ServizioCinema extends Frame {
        protected static int id = 0;
        Label LMsgServer, LInfoFilm, LSala, LOrario, LPostiLiberi;
        TextArea TAInfoFilm, TAMsgServer;
        TextField TFSala, TFOrario, TFPostiLiberi;
        Button BRichiedi, BPostiLiberi, BCompra, BReset;
        ObjectInputStream Ois; 
        ObjectOutputStream Oos;
        Button [][] Mb; 
        String S, O;
        short [][] D;
        Color g, r, b;    
    
        
        public ServizioCinema (InputStream i, OutputStream o)  throws IOException {
            super ("Servizio Cinema " + (id ++));
            this.setLayout(null); //che fa????
            setResizable(false);
            try {
                System.out.println("qui arriva 1");
                Ois = new ObjectInputStream (i);
                System.out.println("qui non arriva 1");
                Oos = new ObjectOutputStream (o);
                
           }catch (IOException e){
                System.out.println("oh 4");
                System.out.println("IOException E" + "\n");
            }
           
            g = Color.GREEN;
            r = Color.RED;
            b = Color.BLUE;
    .
    .
    ...
    Netbean compila tutto tranquillamente, ma in esecuzione si blocca su quelle istruzioni in grassetto.

    ecco l'output del server:

    codice:
    init:
    deps-jar:
    Compiling 1 source file to D:\Download\PROGRAMMAZIONE D RETE\Primo Progetto\ServerclientPROVA 1.1\build\classes
    compile:
    run:
    Accepting connections...
    Accepted from /127.0.0.1
    qui arriva 1
    e quello del client:

    codice:
    init:
    deps-jar:
    Compiling 1 source file to D:\Download\PROGRAMMAZIONE D RETE\Primo Progetto\CLIENTSERVERPROVA 1.1\build\classes
    Note: D:\Download\PROGRAMMAZIONE D RETE\Primo Progetto\CLIENTSERVERPROVA 1.1\src\clientserverprova\ServizioCinema.java uses or overrides a deprecated API.
    Note: Recompile with -Xlint:deprecation for details.
    compile:
    run:
    qui arriva 2
    l'errore "Note: D:\Download\PROGRAMMAZIONE D RETE\Primo Progetto\CLIENTSERVERPROVA 1.1\src\clientserverprova\ServizioCinema.java uses or overrides a deprecated API.
    Note: Recompile with -Xlint:deprecation for details." credo sia perchè uso alcuni metodi deprecati per creare il frame.


    Qualcuno mi sa dire perchè in runtime si bloccano entrambi su sti objectStream??? Li ho dichiarati in qualche modo sbagliato? Ho sbagliato aprendere l'inputstream e l'outputstream? Dio mi vuole male?

    Non so dove mettere le mani : \

    Grazie in anticipo per l'aiuto

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Leggi questa discussione in cui ho spiegato la questione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    ciao ho letto ma non ho capito bene come fare a risolvere...

    Ho provato a spostare il blocco objectinputstream e objectoutputstream nel rune invece che nella dichiarazione della classe collabhandler ma il rpoblema è lo stesso...

    Non è che guardando il mio codice puoi dirmi che devo fare per sbloccarlo?
    I passi in grassetto sono dove ho dichiarato gli stream in questione

  4. #4
    ok sono riuscito a sbloccare la ObjectOutputStream sia del server che del client scrivendo sullo stream con una writeInt.

    Però mi restano bloccate entrambe le ObjectInputStream

    posto il codice:

    Server
    codice:
    oos = new ObjectOutputStream(socket.getOutputStream());
                oos.writeInt(sbloc);
                System.out.println("qui ORA arriva 1");
                ois = new ObjectInputStream(socket.getInputStream());
                sbloc = ois.readInt();
                System.out.println("qui non arriva 1");
    Client
    codice:
    Oos = new ObjectOutputStream (o);
                Oos.writeInt(sbloc);
                System.out.println("qui ORA arriva 2");
                Ois = new ObjectInputStream (i);
                sbloc = Ois.readInt();
                System.out.println("qui non arriva 2");
    come posso fare?

  5. #5
    Andbin salvamiiii tuuuuuu!!!!!

  6. #6
    ok ho risolto usando il metodo flush() in ObjectOutputStream.

    Grazie mille a tutti (soprattutto a AndBin :P)

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.