Закрытие клиента показывает мне ошибки - PullRequest
0 голосов
/ 03 сентября 2018

Я пишу клиент-сервер EMAIL на JavaFx. Это код ServerThread:

public void run() {
    System.out.println("---SONO NEL THREAD---");
    ObjectInputStream inStream = null;
    ObjectOutputStream outStream = null;
    try {
        System.out.println("-- CONNESSO --");
        System.out.println("Socket:" + socket);
        InputStream sStream = socket.getInputStream();
        System.out.println("Socket Stream: " + sStream);
        inStream = new ObjectInputStream(sStream);
        System.out.println("Input Stream: " + inStream);

        List<Mail> mailList = (List<Mail>) inStream.readObject();
        System.out.println(mailList);
        try {
            FileWriter w, log;
            System.out.println("Server: crea Log");
            log = new FileWriter("log.txt", true);
            System.out.println("List Size:" + mailList.size());
            if (mailList != null && mailList.size() > 0) {
                System.out.println("---SERVER: LIST---");
                for (Iterator iterator = mailList.iterator(); iterator.hasNext();) {

                    System.out.println(iterator.hasNext());
                    Mail mail = (Mail) iterator.next();

                    System.out.println("List:" + mail.toString());
                    System.out.println("Author: " + mail.getSender());
                    if (mail.getStatus().equals("toRead")) {
                        System.out.println("---");

                    }
                }
            }

// useless code

        } catch (IOException e) {
            System.out.println("Exception into Server Thread, internal");
            e.printStackTrace();
        }
        } catch (EOFException ex) {
            System.out.println("client closed");

    } catch (IOException ex) {
        System.out.println("Exception into Server Thread, external IO");
        Logger.getLogger(ServerThread.class.getName()).log(Level.SEVERE, null, ex);
        ex.printStackTrace();
    } catch (ClassNotFoundException ex) {
        System.out.println("Exception into Server Thread, external NotFound");
        Logger.getLogger(ServerThread.class.getName()).log(Level.SEVERE, null, ex);
        //ex.printStackTrace();
    }finally{
        try {
            if(inStream != null){
                inStream.close();
                if (socket != null) {
                    try {
                        socket.close();
                    } catch (IOException e) {
                        System.out.println("Exception into Server Thread, socket");
                        System.out.println(e.getMessage() + "IO2!");
                    }
                }
            }
            System.out.println("stream chiuso");
        } catch (IOException ex) {
            System.out.println("Exception into Server Thread, stream");
            Logger.getLogger(ServerThread.class.getName()).log(Level.SEVERE, null, ex);

        }

    }

}

Когда я закрываю клиент, я получаю следующие ошибки на сервере:

java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(SocketInputStream.java:210)
at java.net.SocketInputStream.read(SocketInputStream.java:141)
at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2663)
at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2679)
at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:3156)
at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:862)
at java.io.ObjectInputStream.<init>(ObjectInputStream.java:358)
at email.ServerThread.run(ServerThread.java:61)

java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:210)
    at java.net.SocketInputStream.read(SocketInputStream.java:141)
    at java.io.ObjectInputStream$PeekInputStream.read(ObjectInputStream.java:2663)
    at java.io.ObjectInputStream$PeekInputStream.readFully(ObjectInputStream.java:2679)
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(ObjectInputStream.java:3156)
    at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:862)
    at java.io.ObjectInputStream.<init>(ObjectInputStream.java:358)
    at email.ServerThread.run(ServerThread.java:61)

Ошибка email.ServerThread.run(ServerThread.java:61) указывает на inStream = new ObjectInputStream(sStream);

Я думаю, что это проблема с «Выходом», я имею в виду, что ObjectInputStream не закрывается, когда я нажимаю кнопку «Выход» на моем клиенте, и это дает мне эту ошибку. Но я действительно не знаю, как решить и проверить эту проблему.

...