[英]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-Type
和Content-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.