import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class SimpleFileServer {
public final static int SERVER_PORT = 8181;
public static void main (String [] args) throws IOException {
ServerSocket servsock = null;
Socket sock = null;
BufferedInputStream fromFile = null;
try {
servsock = new ServerSocket (SERVER_PORT);
while (true) {
try {
System.out.println ("Server bereit an Port " + SERVER_PORT);
sock = servsock.accept ();
BufferedReader fromClient = new BufferedReader (new InputStreamReader (sock.getInputStream (), "UTF-8"));
String request = fromClient.readLine ();
if (!request.startsWith ("GET "))
throw new IllegalArgumentException (request);
String fileName = request.substring (4);
fromFile = new BufferedInputStream (new FileInputStream (fileName));
BufferedOutputStream toClient = new BufferedOutputStream (sock.getOutputStream ());
int data = -1;
while ((data = fromFile.read()) != -1) {
toClient.write (data);
}
toClient.flush ();
System.out.println ("Datei " + fileName + " wurde an " + sock.getInetAddress () + " uebertragen");
}
catch (IllegalArgumentException e) {
System.out.println ("Ungueltige Anfrage: " + e.getMessage ());
}
catch (FileNotFoundException e) {
System.out.println ("Datei kann nicht gelesen werden: " + e.getMessage ());
}
catch (IOException e) {
System.out.println (e.getMessage ());
}
finally {
if (fromFile != null) {
fromFile.close ();
}
if (sock != null) {
sock.close ();
}
}
}
}
finally {
if (servsock != null) {
servsock.close ();
}
}
}
}