繁体   English   中英

简单的Java Web服务器但没有输出

[英]simple java web server but no output

我正在编写一个简单的Java Web服务器来帮助我理解该机制。 但似乎不起作用。 它会打印请求,但我无法在浏览器或telnet客户端上得到任何响应。 您能帮忙解释一下为什么没有回应吗?

public Server() throws IOException {
    this.ss = new ServerSocket(this.PORT);
}

@Override
public void run() {

    while(true) {
        try {
            Socket cli = this.ss.accept();
            new Thread(new Hanlder(cli)).start();
        } catch (IOException ex) {
            ex.printStackTrace();
        }

    }
}

class Hanlder implements Runnable {

    private Socket client = null;

    public Hanlder(Socket cli) {
        client = cli;
    }

    @Override
    public void run() {
        BufferedWriter bwriter;
        try {

            InputStreamReader input = new InputStreamReader(this.client.getInputStream());
            BufferedReader buf = new BufferedReader(input);
            String line = null;
            while( (line = buf.readLine()) != null ) {
                System.out.println(line);
            }

            bwriter = new BufferedWriter( new OutputStreamWriter(client.getOutputStream()));
            bwriter.write("HTTP/1.1 200 OK \n"
                    + "Hello, World");
            bwriter.flush();

            this.client.close();

        } catch (IOException ex) {
            ex.printStackTrace();
        }

    }
}

您还需要在标题中提供Content-TypeContent-Length参数。

同样在HTTP中,您应使用\\r\\n终止行,并使用\\r\\n\\r\\n终止标头。

例如:

bwriter.write("HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\nContent-Length: 3\r\n\r\nABC");
while( (line = buf.readLine()) != null ) {

当遇到流的末尾时,此循环将退出。

流的结尾尚未遇到! 浏览器在等待服务器响应时刚刚停止发送数据。

空行是(我认为)表示HTTP请求结束的信号。 这样,HTTP / 1.1客户端可以将其他请求(在收到第一个响应之后)发送到同一服务器,而无需打开新连接。

(您的服务器将发送响应,但仅在您的客户端终止连接之后才发送,这可能为时已晚。)


编辑 while循环中需要的是(对于初学者):

if (line.isEmpty()) {
    break;
}

但是,整个HTTP协议确实需要实现。 这是您进行的一项大型学习项目。 请享用!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM