栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

使用Java中的套接字的HTTP 1.1持久连接

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

使用Java中的套接字的HTTP 1.1持久连接

根据您的代码,只有在服务器收到/响应第一个请求后关闭输出流(您的输入流)时,您甚至到达处理发送第二个请求的语句的唯一时间。

这样做的原因是您的代码应该只读取第一个响应

while((amountRead = isr_reader.read(streamBuf)) > 0) {  receivedData.append(streamBuf, 0, amountRead);}

将阻塞直到服务器关闭输出流(即,当

read
return
-1
)或套接字上的读取超时时间结束。在读取超时的情况下,将引发异常,您甚至无法发送第二个请求。

HTTP响应的问题在于它们直到响应结束时才告诉您要从流中读取多少字节。对于HTTP
1.0响应而言,这并不是什么大问题,因为服务器只是在响应之后关闭连接,从而使您能够通过简单地读取所有内容直到流的末尾来获取响应(状态行+标头+正文)。

使用HTTP 1.1持久连接,您将无法再简单地读取所有内容,直到流结束。您首先需要逐行读取状态行和标头,然后根据状态码和标头(例如Content-
Length)确定要读取多少字节以获得响应主体(如果存在于此处)所有)。如果正确执行上述操作,则在关闭连接或发生超时之前,您的读取操作将完成,并且您将完全读取服务器发送的响应。这将使您能够发送下一个请求,然后以与第一个请求完全相同的方式读取第二个响应。

PS请求,请求,读取可能在服务器支持请求流水线的意义上是“有效的”,因此可以接收和处理这两个请求,因此,您将这两个响应都读入一个缓冲区作为“第一个”响应。

PPS确保您

PrintWriter
正在使用
US-ASCII
编码。否则,根据您的系统编码,HTTP请求的请求行和标头可能格式错误(编码错误)。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/438564.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号