Probleme beim senden der HTTP-Antwort mit Java Socket

Ich versucht habe zu schreiben, die Anfänge einer einfachen web-server, aber kann nicht scheinen, um die Antwort zu bekommen gesendet. Ich habe versucht, jede Art von Ausgabe-stream vorstellbar, aber nichts scheint zu funktionieren. Ich bin an einem Verlust. Hier sind die beiden Klassen die ich verwende, tut mir Leid, einige der überflüssige code:

package edu.xsi.webserver;

import java.io.IOException;
import java.net.ServerSocket;


public class WebServer {

int port;
ServerSocket server;

public WebServer(int port) throws IOException{

    this.port = port;
    this.server = new ServerSocket(port);
    Thread t = new Thread(new ServerExec());
    t.start();

}

public class ServerExec implements Runnable {

    public void run(){

        int i = 0;
        while (true) {

            try {
                new WebSession(server.accept(), i++);
                System.out.println("Should print before session");
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    }


}

public static void main(String[] args) {

    try {
        WebServer webServer = new WebServer(8888);
    } catch (IOException e) {
        e.printStackTrace();
    }
}
}

Dies ist die session-Klasse, verarbeitet die Antwort.

package edu.xsi.webserver;

import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.util.Scanner;

public class WebSession implements Runnable {

Socket client;
int num;

public WebSession(Socket client, int num) {

    this.num = num;
    this.client = client;
    Thread t = new Thread(this);
    t.start();
}


public void run() {

    Scanner s = null;
    DataOutputStream out = null;

    try {

        s = new Scanner(client.getInputStream());
        out = new DataOutputStream(client.getOutputStream());

        //Get all input from header
        while (s.hasNextLine()) {
            System.out.println(s.nextLine());
        }
        out.writeBytes("HTTP/1.1 200 OK\r\n");
        out.writeBytes("Content-Type: text/html\r\n\r\n");
        out.writeBytes("<html><head></head><body><h1>Hello</h1></body></html>");

        s.close();
        out.flush();
        out.close();

    } catch(IOException ioe) {

        ioe.printStackTrace();
    }

}

}

nicht der server liest alle Eingaben, die vom client? debug um zu sehen, ob es immer geht, dass while(en.hasNextLine ()) - Schleife.
whoa, du hast Recht. Ich auskommentiert die while-Schleife und bekam den Ausgang. Anscheinend muss ich mehr tun, Forschung :). Sollten Sie vielleicht Lesen, bis aufeinander folgende Reihe von '\r\n'. Danke, das war mich zu töten.

InformationsquelleAutor webhound | 2012-05-17

Schreibe einen Kommentar