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.
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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe gekämpft wie verrückt, mit einem sehr ähnlichen Problem.
Nachdem buchstäblich Kopf-Bänderung auf der Wand fand ich meine Problem war so trivial hielt ich auf head-banging auf der Wand für eine Weile.
Grundsätzlich in meinem input while-Schleife, ich war die überprüfung für eine null-Linie, aber ich habe vergessen, zu überprüfen, ob eine leere Zeile (und danach Pause).
Nicht garantieren, es wird funktionieren auf die gleiche für Sie, aber hier ist mein cent:
Meine Konstanten sind:
Meiner "session" - variable ist ein
Socket
Objekt.InformationsquelleAutor Mena
Schließen Sie den Scanner schließt die zugrunde liegende input-stream, das schließt den socket. Schließen Sie Sie nicht. Schließen Sie den output-stream auch schließt den socket. Sie brauchen nicht beide, und Sie sollten in der Nähe der Ausgabe-stream/writer statt dem input-stream an, damit es gespült wird.
InformationsquelleAutor user207421
Den code unten wird Ihr problem lösen:
InformationsquelleAutor Sajal Goyal
Versuchen Sie, übergeben Sie das Datum.
InformationsquelleAutor cassio.moreto