Сокет входит в два раза в состоянии finally / catch - PullRequest
0 голосов
/ 03 декабря 2018

Я только что закончил клиент-серверную программу, где сервер отправляет клиенту список строк.Это работает, но проблема в том, что клиент входит два раза в предложения finally и catch (я не знаю, почему он входит в catch, даже если он работает).Вот клиент:

public void loadData() throws IOException, ClassNotFoundException, ParseException {

    try {
        Socket s = new Socket("127.0.0.1", 5000);
        ArrayList<Email> email = new ArrayList<Email>();
        DateFormat format = new SimpleDateFormat("dd/MM/yyyy");
        Date data;

        /* PHASE 1: The client sends a string to the server */
        try {
            PrintWriter out = new PrintWriter(s.getOutputStream(), true);
            out.println(account); // send the account name to server

            /* PHASE 2: The client receives the ArrayList with the emails */
            BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream()));
            String line;
            String message[] = new String[5];
            for (int j=0; (line = in.readLine()) != null;) {
                message[j++] = line;
                if (j==5) {
                    data = format.parse(message[3]);
                    email.add(new Email((Integer.parseInt(message[0])), message[1], account, message[2], message[4], data));
                    j=0;
                }
            }

            //Casting the arrayList
            emailList = FXCollections.observableArrayList(email);

            //Sorting the emails
            Collections.sort(emailList, (Email o1, Email o2) -> {
                if (o1.getData() == null || o2.getData() == null) {
                    return 0;
                }
                return o1.getData().compareTo(o2.getData());
            });

        } finally {
            System.out.println("Closing the socket");
            s.close();
        }
    } catch (SocketException se) {
        System.out.println("Entering here");
        //emailList.setAll(null, null);
    }
}

Это вывод, который я получаю с помощью println:

Closing the socket
Closing the socket
Entering here
Entering here

Это сервер, если может помочь:

public void run() {
        textarea.setText("Connected from: "+incoming.getLocalAddress());
        String nomeAccount = "";
        try {
            //PHASE 1: The server receives the email
            try {
                BufferedReader in = new BufferedReader(new InputStreamReader(incoming.getInputStream()));
                nomeAccount = in.readLine();
            } catch (IOException ex) {
                System.out.println("Not works");
            }

            //PHASE 2: I'm getting all the emails from the files
            File dir = new File("src/server/" + nomeAccount);
            String[] tmp = new String[100];
            int i = 0;
            for (File file : dir.listFiles()) {
                if (file.isFile() && !(file.getName().equals(".DS_Store"))) {
                    try (BufferedReader br = new BufferedReader(new FileReader(file))) {
                        String line;
                        while ((line = br.readLine()) != null) {
                            tmp[i++] = line;
                        }
                    } catch (IOException ex) {
                        System.out.println("Cannot read from file");
                    }
                }
            }

            //PHASE 3: The server sends the Strings to the client
            try {
                PrintWriter out = new PrintWriter(incoming.getOutputStream(), true);
                for (int j=0; j<i; j++) {
                    out.println(tmp[j]); // send the data name to server
                }
            } catch (IOException e) {
                System.out.println("Failed to send ArrayList");
                e.printStackTrace();
            }
        } finally {
            try {
                incoming.close();
            } catch (IOException ex) {
                Logger.getLogger(ServerController.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...