簡體   English   中英

ObjectInputStream / ObjectOutputStream | 接收和發送大量對象的客戶端(Java)

[英]ObjectInputStream / ObjectOutputStream | client that receive and send a lot of objects (Java)

我在多線程服務器/客戶端項目上有問題。

服務器端很好,但是問題出在客戶端上。

每當我需要在類上聲明一個ObjectInputStreamObjectOutputStream作為屬性,然后在構造函數上實例化它們時,我就可以發送和接收對象

但是問題是代碼在ObjectInputStream實例上阻塞了。

這是我的代碼:

客戶:

 public class agency_auth_gui extends javax.swing.JFrame {

    Socket s_service;
    ObjectOutputStream out;
    ObjectInputStream in;

    public agency_auth_gui() {
        try {
            initComponents();
            System.out.println("#Connexion en cours avec le Serveur Bancaire.");
            s_service = new Socket("127.0.0.1", 6789);

            out = new ObjectOutputStream(new BufferedOutputStream(s_service.getOutputStream()));
            in= new ObjectInputStream(new BufferedInputStream(s_service.getInputStream()));
            //Authentification du Client GAB
            out.writeObject((String) "type:agence");
            out.flush();

        } catch (UnknownHostException ex) {
            Logger.getLogger(agency_auth_gui.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(agency_auth_gui.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
...
Some automaticaly generated swing code
...
    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        try {
            // Envoi d'une arraylist exec contenant l'authentification

            ArrayList exec = new ArrayList();
            exec.add("auth_agent");
            exec.add(jTextField1.getText());
            exec.add(jTextField2.getText());
            out.writeObject((ArrayList) exec);
            out.flush();

            // Reception de la reponse du serveur pour la fonction authentification


            Agent agent = (Agent) in.readObject();
            if(agent.getId()==0)
            {
                System.out.println("null");
            }else
            {
                System.out.println(agent.getId());
            }

        } catch (IOException ex) {
            Logger.getLogger(agency_auth_gui.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ClassNotFoundException ex) {
            Logger.getLogger(agency_auth_gui.class.getName()).log(Level.SEVERE, null, ex);
        } 
    }                                        


    public static void main(String args[]) {
        try {

            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }

        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(agency_auth_gui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(agency_auth_gui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(agency_auth_gui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(agency_auth_gui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }

        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new agency_auth_gui().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify                     
..

根據JavaDoc for ObjectInputStream

該構造函數將阻塞,直到相應的ObjectOutputStream寫入並刷新了頭為止。

編輯

因此,看來您沒有從另一端收到InputStream上的任何內容。

顯然,接受連接后,您的服務器就不會構造ObjectOutputStream。 不要推遲此步驟:它將在構造其ObjectInputStream時阻止客戶端。 請參閱Javadoc。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM