# Compiler meckert bei Socket rum



## Manuke (19. Mai 2004)

Hi, is bestimmt nur eine kleine merkwürdigkeit die sich schnell beheben lässt, aber ich werd nicht schlauer aus meinem Buch und das Netz (inkl. das Forum hier mit seinen nicht wenigen Fragen zu Sockets) hilft nichts -_-
Das Problem ist, dass ich beim Compilieren zugespammt werden mit:

*unreported exception java.net.UnknownHostException; must be caught or declared to be thrown*

Die UnknownHostException tritt eigentlich doch dann auf, wenn der Host nicht in eine IP aufgelöst werden kann, aber der Compiler tut das doch auch gar nicht... naja gut, ich verwirre mich grad nur selber 

Achso ja, das hab ich eigentlich mehr oder weniger so aus >>Java in a Nutshell<< abgeschrieben. Also wundere ich mich noch mehr, dass es nicht geht.
das Prog soll nur einfach ne Verbindung aufbauen, die index file anfordern und auf die Konsole ausgeben...

Hab grad erst mit vertieftem Java angefangen und Netzwerkprogrammierung sowieso erst seit gestern, von daher...
hier is der Code:


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

public class NetTest {
    public static void main(String[] args){
        String filename = "/index.php";
        Socket s = new Socket("www.archotype.de",80);
        BufferedReader fromServer = new BufferedReader(new InputStreamReader(s.getInputStream()));
        PrintWriter toServer = new PrintWriter(new OutputStreamWriter(s.getOutputStream()));
        toServer.print("GET "+filename+" HTTP/1.0\n\n");
        toServer.flush();
        for(String l=null;(l = fromServer.readLine()) != null;){
            System.out.println(l);
        }
        toServer.close();
        fromServer.close();
        s.close();
    }
}
```


----------



## Beni (19. Mai 2004)

Es geht darum, dass später einmal solch eine Exception passieren könnte, und der Compiler von dir eine entsprechende Reaktion erwartet.

Du musst einen try-catch-Block implementieren:

Allgemein gesagt:

```
public void doSomething throws VeryDangerousException{
   ...
}
```


```
public static void main( String[] args ){
  try{
    XYZ xyz = ...
    xyz.doSomething();
  }
  catch( VeryDangerousException ex ){
    System.out.println( "Something strange happend" );
  }
}
```

siehe auch

mfg Beni

[Edit:]
Eine andere Variante ist, die Exception weiterzureichen:


```
public static void main( String[] args ) throws VeryDangerousException{
   xyz.doSomething();
}
```

Allerdings weiss dann der User nicht, wieso das Progi einfach abstürzt.


----------



## Manuke (19. Mai 2004)

Das Problem dabei ist allerdings - soweit ich weiss -, dass der Socket, der ja in dem Try-Catch Block initialisiert wird ein anderer Gültigkeitsbereich ist (eben dieser Block) und dann geht das meckern bei den Objekten dahinter los, weil sie nicht drauf zugreifen können.
Ich hatte es auch schonmal mit try versucht, ging aber genau so wenig. Bzw dann gibts keine UnknownHostException sondern ne IOException

AHH! Moment moment^^ Ich hab grad auch einfach diese Exception noch abgefangen. jetzt gehts...


----------

