# Problem bei Sockets/InputStream über externe Klasse



## Einwegdose (12. Jun 2006)

HI!

Ich hab ein kleines Problem, was ich beim besten Willen nicht verstehe.
Es geht einfach darum, zu einem Server zu connecten und das auszuspucken, was er beim connecten meldet. Dabei geht es jetzt garnicht um das Protokoll !


Hier nun die Beispielklasse, wo es funktioniert:


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

public class Connection {

 public static void main(String args[]) {
  String text = "";
  try {
   Socket soc = new Socket("irc.quakenet.org",6667);
   BufferedReader br = new BufferedReader(new InputStreamReader(soc.getInputStream()));
   text = br.readLine();
  } catch(Exception e) {}
  System.out.println("Empfangen: " + text);
 }

}
```

Ich bekomme ein 



> Empfangen: NOTICE AUTH :*** Looking up your hostname



zurück.


Nun etwas abgewandelt. Der Code der Connection.java verändert:


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

public class Connection {

  public String connecttoserver() {
  String text = "";
  try {
   Socket soc = new Socket("irc.quakenet.org",6667);
   BufferedReader br = new BufferedReader(new InputStreamReader(soc.getInputStream()));
   text = br.readLine();
  } catch(Exception e) {}
  return text;
 }

}
```

In einer anderen Klasse (JApplet) rufe ich die Methode auf:


```
public void jButton1ActionPerformed(ActionEvent evt) {
    Connection c = new Connection();
    System.out.println("Empfangen: " + c.connecttoserver());
  }
```

Zurück kommt allerdings nur ein



> Empfangen:




Ich verstehe es nicht. Weiss einer wieso ?

// Inzwischen bin ich soweit, dass es wohl an dem JApplet liegen muss, da es bei mit nem JFrame funktioniert. 
Geht das bei einem JApplet nicht ?


----------



## meez (12. Jun 2006)

Ist wahrscheinlich wegen der Security...Applets sollten eigentlich keine Connections zu "fremden" Servern aufmachen können...


----------



## Einwegdose (12. Jun 2006)

Kann man das ausschalten ?  :bae: 

Es gibt doch tausende von Applets für IRC-, FTP-, etc.etc -Server oder nicht ?


----------



## Wildcard (12. Jun 2006)

Dein Applet muss signiert sein damit es aus der Sandbox ausbrechen kann.
Das hier hat dir übrigens das Genick gebrochen:

```
catch(Exception e) {}
```
Exceptions sollen immer so konkret wie möglich gefangen werden und ein

```
catch(BlahBlahException ex)
{
   ex.printStackTrace();
}
```
ist das absolut mindeste.


----------



## Einwegdose (12. Jun 2006)

Hehe ja mit den Exceptions muss ich mich noch mehr befassen 

Aber danke für den Hinweis mit dem Signieren. Werde dann mal etwas googeln und hoffen das ich es hinbekomme !


----------



## Einwegdose (12. Jun 2006)

Leider klappt das Signieren nicht (

Habe jetzt schon mehrere Versuche gemacht, der letzte: 

>> keytool -genkey -keyalg rsa -alias test
>> keytool -export -alias test -file "c:\pfad\zur\datei.crt"
>> jarsigner "C:\pfad\zur\datei.jar" test

Danach eine HTML-Datei erstellt:


```
<html>
<head>
<title>Applet</title>
</head>
<body>
<h1>Applet</h1>
<hr>
<applet archive="datei.jar" width="650" height="300">
</applet>
<hr>
</body>
</html>
```

Tja, und da bekomme ich beim Aufruf direkt eine Nullpointer-Exception. Wenn ich allerdings die unsignierte class-Datei als Applet im Browser aufrufe, funktioniert sie (nur eben die Funktionen außerhalb des Sandkastens funktionieren nicht).



EDIT : Hat sich erledigt  Ich wusste nicht, dass der applet-Tag beides enthalten muss  :autsch: 


```
<applet archive="GameSearch.jar" code="GameSearch.class" width="650" height="300">
```

Jetzt gehts


----------

