我需要构建一个Java服务器,客户端发送HTTP请求,服务器发送HTTP响应,客户端发送另一个HTTP请求,服务器发送最终响应。但是,在服务器向请求发送第一个响应后,连接超时。我意识到客户端甚至没有读取我的响应,直到我关闭输入流,但这会过早地结束对话。这是我的类ServerThread的run方法,它扩展了Thread。
public void run() {
try {
l.add(index, serv.accept());
new ServerThread(serv, l, index + 1).start();
Socket socket = (Socket)l.get(index);
index++;
while(true) {
while(socket.getInputStream().available() == 0) {}
while(socket.getInputStream().available() > 0)
System.out.print((char)socket.getInputStream().read());
BufferedWriter b = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
b.write("HTTP/1.1 200 OK\n" +
"Connection: keep-alive");
b.flush();
//b.close();
}
} catch (IOException e) {
}
}
基本上,此代码接受客户端并阻塞,直到输入流中有信息。在有信息之后,它打印出请求并向客户端写入200 OK响应,而不管请求如何并保持连接活动。当我注释掉b.close()调用时,会话挂起,但是一旦我停止服务器,客户端就会读取响应。我该如何解决这个问题?