httpURlConnection与Socket

客户端与服务器的连接归根结底都是socket连接,在Java中就是客户端的Socket与服务器端的ServerSocket进行连接。在使用HttpURLConnection时,总会有种疑惑:它是怎么建立连接并且是如何获取与服务器交互的数据呢。下午利用点儿时间梳理了HttpURLConnection与Socket之间的联系。


我们在程序中声明的HttpURLConnection是一个抽象类:java.NET.HttpURLConnection,

而具体的实现类是sun.Net.www.protocol.http.HttpURLConnection。

该实现类中拥有sun.net.www.http.HttpClient的一个实例对象,

而HttpClient继承自sun.net.NetworkClient,NetworkClient类声明有Socket成员变量。

由此而建立起HttpURLConnection与Socket之间的联系。

[java]  view plain  copy
  1. abstract public class HttpURLConnection extends URLConnection   // 抽象类  
  2. public class HttpURLConnection extends java.net.HttpURLConnection// 具体实现类进行真实的操作  
  3. {  
  4. .....  
  5.  protected HttpClient http; // 与服务器的连接以及数据交互依赖于此HttpClient对象  
  6. .....  
  7. }  
  8. public class HttpClient extends NetworkClient// HttpClient继承与NetworkClient,因此拥有NetworkClient类中的成员变量以及方法  
  9. public class NetworkClient  
  10. {  
  11. .....  
  12. protected Socket serverSocket = null;// 最终执行网络连接的Socket对象  
  13. .....  
  14. }  

HttpURLConnection的connect()方法调用内部方法plainConnect(),plainConnect()中有如下代码对HttpClient进行实例化:

[java]  view plain  copy
  1. http = getNewHttpClient(url, null, connectTimeout, false);  

  在实例化HttpClient的同时也就是实例化了NetworkClient。在HttpClient类的构造方法中有这么一行代码:

[java]  view plain  copy
  1. openServer(); // 该方法来自于NetworkClient,该方法根本上建立了与服务器的socket连接,同时为socket成员变量赋值  

  HttpURLConnection的所有数据操作方法(getInputStream(), getOutputStream()等等)

都会调用生成的socket连接进行处理。

HttpUrLConnection在socket超时时间内可以复用socket。

disconnect()方法会关闭HttpUrLConnection使用的socket。

HttpUrLConnection已经将实际流程与操作封装的很好,如非必要可不用考虑使用socket。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值