根据您的代码,只有在服务器收到/响应第一个请求后关闭输出流(您的输入流)时,您甚至到达处理发送第二个请求的语句的唯一时间。
这样做的原因是您的代码应该只读取第一个响应
while((amountRead = isr_reader.read(streamBuf)) > 0) { receivedData.append(streamBuf, 0, amountRead);}将阻塞直到服务器关闭输出流(即,当
readreturn
-1)或套接字上的读取超时时间结束。在读取超时的情况下,将引发异常,您甚至无法发送第二个请求。
HTTP响应的问题在于它们直到响应结束时才告诉您要从流中读取多少字节。对于HTTP
1.0响应而言,这并不是什么大问题,因为服务器只是在响应之后关闭连接,从而使您能够通过简单地读取所有内容直到流的末尾来获取响应(状态行+标头+正文)。
使用HTTP 1.1持久连接,您将无法再简单地读取所有内容,直到流结束。您首先需要逐行读取状态行和标头,然后根据状态码和标头(例如Content-
Length)确定要读取多少字节以获得响应主体(如果存在于此处)所有)。如果正确执行上述操作,则在关闭连接或发生超时之前,您的读取操作将完成,并且您将完全读取服务器发送的响应。这将使您能够发送下一个请求,然后以与第一个请求完全相同的方式读取第二个响应。
PS请求,请求,读取可能在服务器支持请求流水线的意义上是“有效的”,因此可以接收和处理这两个请求,因此,您将这两个响应都读入一个缓冲区作为“第一个”响应。
PPS确保您
PrintWriter正在使用
US-ASCII编码。否则,根据您的系统编码,HTTP请求的请求行和标头可能格式错误(编码错误)。



