使用Javasocket发送HTTP响应时出现问题
我一直在尝试编写一个简单的web服务器的开始,但似乎无法获得发送的响应。我尝试了所有可以想象的输出流类型,但似乎没有任何效果。我不知所措。下面是我正在使用的两个类,对于一些无关的代码感到抱歉:
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();
}
}
}
这是处理响应的会话类
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();
}
}
}
# 1 楼答案
关闭扫描仪将关闭底层输入流,从而关闭套接字。别关上它。关闭输出流也会关闭套接字。您不需要两者都使用,并且应该关闭输出流/写入器,而不是输入流,以便刷新它
# 2 楼答案
试着过一下日期
# 3 楼答案
以下代码将解决您的问题:
# 4 楼答案
我一直在为一个非常类似的问题拼命挣扎
我发现我的问题是如此的微不足道,以至于我头撞了一段时间
基本上,在我的输入while循环中,我检查了一个空行,但我忘记了检查一个空行(随后中断)
不保证对你也一样,但这是我的一分钱:
我的常数是:
我的“session”变量是一个
Socket
对象