HTTP会话不是持久的

时间:2014-06-10 17:48:03

标签: java http

我需要构建一个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()调用时,会话挂起,但是一旦我停止服务器,客户端就会读取响应。我该如何解决这个问题?

0 个答案:

没有答案