# Socket HTTP-Server



## El Kabong (3. Mai 2011)

Hallo zusammen!

Ich würde gerne eine Datei aus dem Verzeichnis herunterladen in dem sich mein HTTP-Server befindet.
Mein Problem ist das ich jetzt nicht weiß wie ich das Verzeichnis angebe in dem die Dateien + HTTP-Server liegen.
Bei einer Datei klappt es ganz gut wenn ich den Dateinamen angebe, bei mehreren Dateien wird das aber etwas schwierig.



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

public class HTTPServer {
  public static void main (String[] args ) throws IOException {

    ServerSocket servsock = new ServerSocket(5050);
    while (true) {
      System.out.println("HTTP-Server gestartet.");

      Socket sock = servsock.accept();
      System.out.println("Verbindung akzeptiert : " + sock);

      File datei = new File ("index.html");
      byte [] bytearray  = new byte [(int)datei.length()];
      FileInputStream inputStream = new FileInputStream(datei);
      BufferedInputStream bis = new BufferedInputStream(inputStream);
      bis.read(bytearray,0,bytearray.length);
      OutputStream outputStream = sock.getOutputStream();
      System.out.println("Uebertrage...");
      outputStream.write(bytearray,0,bytearray.length);
      outputStream.flush();
      sock.close();
      }
    }
}
```

Ich hatte ja gehofft das ich statt des Dateinamens einfach sowas "/" einsetzen könnte, dass funktioniert leider nicht. 
Was muss ich verändern damit ich den Dateinamen nicht mit angeben muss?



Gruß,
El Kabong


----------



## tuxedo (4. Mai 2011)

Du musst jede File einzeln runterladen. Da führt kein Weg dran vorbei.


----------



## El Kabong (4. Mai 2011)

tuxedo hat gesagt.:


> Du musst jede File einzeln runterladen. Da führt kein Weg dran vorbei.



Okay. Aber es muss doch möglich sein das ich im folgenden Codestück nicht immer den Dateinamen einsetzen muss den ich herunterladen will. 


```
File datei = new File ("index.html");
```

Wenn ich in meinem Ordner 10 Dateien habe dann will ich nicht immer den Dateinamen in den Code schreiben müssen.


----------



## XHelp (4. Mai 2011)

Was hat das ganze eigentlich mit HTTP zu tun?


----------



## HoaX (4. Mai 2011)

El Kabong hat gesagt.:


> ```
> File datei = new File ("index.html");
> ```
> 
> Wenn ich in meinem Ordner 10 Dateien habe dann will ich nicht immer den Dateinamen in den Code schreiben müssen.


Dann schau dass du vom Server irgendwie die Informationen bekommst welche Dateien im Verzeichnis liegen und bau dir dann eine passende Scheife...


----------



## XHelp (4. Mai 2011)

HoaX hat gesagt.:


> Dann schau dass du vom Server irgendwie die Informationen bekommst welche Dateien im Verzeichnis liegen und bau dir dann eine passende Scheife...



Er IST der Server. Das ist ja auch die Sache, die mich irritiert.


----------



## tuxedo (4. Mai 2011)

Öhm, ach so. Ja aber das IST KEIN http-Server. Das ist ein Socketserver der auf Port 5050 lauscht und beim Zustandekommen einer Verbindung (durch einen Client) eine vorher definierte Datei zum Client überträgt...

Wenn das wirklich eine Art Webserver werden soll, dann am besten mal hier reinschauen:

NanoHTTPD.java

Das ist ein minimalistischer Webserver in nur einer Java-Klasse. Da kann man sich was abschauen oder das Teil gleich so wie es ist verwenden. Aber das was der TS hier fabriziert hat ist bei weitem noch kein "HTTP Server".

- Alex


----------

