Я только что закончил клиент-серверную программу, где сервер отправляет клиенту список строк.Это работает, но проблема в том, что клиент входит два раза в предложения 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);
}
}
}