Avatar billede daudaudaudau Nybegynder
23. oktober 2013 - 21:35 Der er 3 kommentarer og
1 løsning

Spørgsmål angående try/finally

Hej. Jeg har fået denne kodestump, som laver en simpel server i Java. Mit spørgsmål er ganske enkelt: Hvorfor er der to sæt try/finally? Hvorfor ikke bare putte det hele ind i én try/finally?


//: c15:JabberServer.java
// Very simple server that just
// echoes whatever the client sends.
// {RunByHand}

import java.io.*;
import java.net.*;

public class JabberServer { 
  // Choose a port outside of the range 1-1024:
  public static final int PORT = 8080;
  public static void main(String[] args)
      throws IOException {
    ServerSocket s = new ServerSocket(PORT);
    System.out.println("Started: " + s);
    try {
      // Blocks until a connection occurs:
      Socket socket = s.accept();
      try {
        System.out.println(
          "Connection accepted: "+ socket);
        BufferedReader in =
          new BufferedReader(
            new InputStreamReader(
              socket.getInputStream()));
        // Output is automatically flushed
        // by PrintWriter:
        PrintWriter out =
          new PrintWriter(
            new BufferedWriter(
              new OutputStreamWriter(
                socket.getOutputStream())),true);
        while (true) { 
          String str = in.readLine();
          if (str.equals("END")) break;
          System.out.println("Echoing: " + str);
          out.println(str);
        }
      // Always close the two sockets...
      } finally {
        System.out.println("closing...");
        socket.close();
      }
    } finally {
      s.close();
    }
  }
} ///:~
Avatar billede arne_v Ekspert
23. oktober 2013 - 21:38 #1
Hvis du vil vide det med sikkerhed saa spoerg vedkommende som har skrevet koden.

:-)

Men et gaet er at vedkommende har kopieret og tilrettet koden fra et eksempel, hvor det gav mening.
Avatar billede arne_v Ekspert
23. oktober 2013 - 21:43 #2
Ofte vil man nemlig have logik a la:

try {
    opret server socket
    while accept socket connection  {
      try {
          IO til og fra socket
      } catch & finally {
          luk denne socket connection og udskriv fejl // hvorefter vi gaar til while og accepter ny connection
      }
    }
} catch & finally {
    luk server socket // hvorefter program afslutter
}
Avatar billede margitbork Nybegynder
25. oktober 2013 - 14:03 #3
Det må være for ikke at skulle teste om socket er null...
Avatar billede margitbork Nybegynder
25. oktober 2013 - 15:52 #4
og selv hvis socket.close smider en exception kommer man ned til s.close...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester