Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HTTP套接字流的结尾?_Java_Sockets_Http - Fatal编程技术网

Java HTTP套接字流的结尾?

Java HTTP套接字流的结尾?,java,sockets,http,Java,Sockets,Http,对于网络作业,我们需要创建一个HTTP客户端(版本1.1)。问题是 OutputStream output = socket.getOutputStream(); PrintWriter writer = new PrintWriter(output, true); writer.println("GET / HTTP/1.1"); writer.println("Host: " + uri.getHost()); writer.println("Accept: text/html"); wr

对于网络作业,我们需要创建一个HTTP客户端(版本1.1)。问题是

OutputStream output = socket.getOutputStream();
PrintWriter writer = new PrintWriter(output, true);

writer.println("GET / HTTP/1.1");
writer.println("Host: " + uri.getHost());
writer.println("Accept: text/html");
writer.println();

InputStream input = socket.getInputStream();

BufferedReader reader = new BufferedReader(new InputStreamReader(input));

String line;
StringBuilder builder = new StringBuilder();

while ((line = reader.readLine()) != null) {
    builder.append(line);
}
return builder.toString();
挂起在输入的末尾,因为我们使用http 1.1,所以不能简单地关闭连接。那么,如何检测输入的结束

那么,如何检测输入的结束

通过遵循标准。清楚地描述了如何指定消息长度。简言之,按此顺序:

  • 一些响应代码意味着根本没有尸体
  • 如果使用传输编码chunked,则长度事先未知,但响应由多个块组成,每个块都以长度为前缀
  • 如果给定内容长度标题,则它包含长度
  • 内容类型为multipart/byteranges的响应根据MIME规范结束
  • 最后,响应可能以服务器关闭连接而结束