Java Webserver

HoOriZzon

Grünschnabel
Hallo Community,

Ich sitze schon ein paar Stunden an einem Problem und weiß nichtmehr weiter. Vllt könnt ihr mir helfen.

Ich habe folgenden Quelltext gefunden:

Code:
package index;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Webserver {
	private ServerSocket serverSocket;

	/**
	 * 
	 * @param args
	 * @throws IOException
	 */
	public Webserver() {
		try {
			while (true) {
				System.out.println("Waiting for client");

				
				serverSocket = new ServerSocket(9876);
				final Socket clientSocket = serverSocket.accept();

				System.out.println("HELOKOKEKJANÖDKJNAHDKJHNWALKD");
				final HTTPWorker httpWorker = new HTTPWorker(clientSocket);
				(new Thread(httpWorker)).run();
			}
		} catch (Exception e) {
			System.out.println(e.toString());
		}
	}
}

class HTTPWorker implements Runnable {
	protected final static String WORK_DIR = "/tmp/webserver";
	protected Socket clientSocket;

	public HTTPWorker(final Socket clientSocket) {
		this.clientSocket = clientSocket;
	}

	public void run() {
		try {
			final InputStream is = clientSocket.getInputStream();
			final int bytesToRead = is.available();
			if (bytesToRead == 0) {
				throw new IllegalArgumentException("No request data found");
			}
			final byte[] barray = new byte[bytesToRead];
			is.read(barray, 0, bytesToRead);
			final String client_data = new String(barray);
			final String regex = ".*GET (.*) HTTP.*";
			final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE
					| Pattern.DOTALL);
			final Matcher matcher = pattern.matcher(client_data);
			if (matcher.matches()) {
				final String requestedPage = matcher.group(1);
				final File htmlFile = new File(WORK_DIR + "/" + requestedPage);
				if (htmlFile.exists() && htmlFile.isFile()) {
					final BufferedReader reader = new BufferedReader(
							new FileReader(htmlFile));
					final StringBuffer contentBuffer = new StringBuffer();
					String line;
					while ((line = reader.readLine()) != null) {
						contentBuffer.append(line);
						contentBuffer.append("\n");
					}
					final String contentString = contentBuffer.toString();
					final String httpHeader = buildHeader(
							contentString.length(), "200 OK");
					clientSocket.getOutputStream().write(httpHeader.getBytes());
					clientSocket.getOutputStream().write(
							contentString.getBytes());
				} else {
					final String content = "<html><head><title>4000004</title></head><body><h1>4000000004 - Not found</h1></body></html>";
					final String data = buildHeader(content.length(),
							"404 Not Found");
					clientSocket.getOutputStream().write(data.getBytes());
					clientSocket.getOutputStream().write(content.getBytes());
					System.out.println("404-Error");
				}
			}
		} catch (final Exception e) {
			e.printStackTrace();
		} finally {
			if (clientSocket != null && !clientSocket.isClosed()) {
				closeSocketNE();
			}
		}
	}

	private String buildHeader(final int stringLength, final String httpState) {
		return "HTTP/1.1 " + httpState + "\n" + "Content-Length: "
				+ stringLength + "\n" + "Content-Type: text/html\n"
				+ "Connection: close\n\n";
	}

	private void closeSocketNE() {
		try {
			clientSocket.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}



und



Code:
package index;

import java.io.IOException;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
	
			new Webserver();
	
		
	}

}


Wen ich das Starte ist alles in Ordnung. Wen ich dan in den Browser eintrage 127.0.0.1/9876 oder localhost/9876 bzw 192.168.1.150/9876 kommt nur das der Browser nichts finden kann und Java bemerkt kein verbindungsversuch. Was muss ich ändern um mit Jedem browser auf jedem Rechner auf dieses Programm zugreifen kann?

MfG Johannes
 
Vielleicht solltest du als URL statt dessen mal 127.0.0.1:9876 verwenden? Port-Nummern, die nicht dem HTTP-Standard (80 bzw. 443) entsprechen, werden als URL mit dem Doppelpunkt getrennt. Der Slash (oder Schrägstrich) ist ein Pfad-Trenner.
 

Neue Beiträge

Zurück