HttpURLConnection 与 Socket
2013-11-23 20:23
471 查看
客户端与服务器的连接归根结底都是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之间的联系。
HttpURLConnection的connect()方法调用内部方法plainConnect(),plainConnect()中有如下代码对HttpClient进行实例化:
在实例化HttpClient的同时也就是实例化了NetworkClient。在HttpClient类的构造方法中有这么一行代码:
HttpURLConnection的所有数据操作方法(getInputStream(), getOutputStream()等等)
都会调用生成的socket连接进行处理。
HttpUrLConnection在socket超时时间内可以复用socket。
disconnect()方法会关闭HttpUrLConnection使用的socket。
HttpUrLConnection已经将实际流程与操作封装的很好,如非必要可不用考虑使用socket。
Good Bye, Readers! See You Next Post.....
我们在程序中声明的HttpURLConnection是一个抽象类:java.net.HttpURLConnection,
而具体的实现类是sun.net.www.protocol.http.HttpURLConnection。
该实现类中拥有sun.net.www.http.HttpClient的一个实例对象,
而HttpClient继承自sun.net.NetworkClient,NetworkClient类声明有Socket成员变量。
由此而建立起HttpURLConnection与Socket之间的联系。
abstract public class HttpURLConnection extends URLConnection // 抽象类 public class HttpURLConnection extends java.net.HttpURLConnection// 具体实现类进行真实的操作 { ..... protected HttpClient http; // 与服务器的连接以及数据交互依赖于此HttpClient对象 ..... } public class HttpClient extends NetworkClient// HttpClient继承与NetworkClient,因此拥有NetworkClient类中的成员变量以及方法 public class NetworkClient { ..... protected Socket serverSocket = null;// 最终执行网络连接的Socket对象 ..... }
HttpURLConnection的connect()方法调用内部方法plainConnect(),plainConnect()中有如下代码对HttpClient进行实例化:
http = getNewHttpClient(url, null, connectTimeout, false);
在实例化HttpClient的同时也就是实例化了NetworkClient。在HttpClient类的构造方法中有这么一行代码:
openServer(); // 该方法来自于NetworkClient,该方法根本上建立了与服务器的socket连接,同时为socket成员变量赋值
HttpURLConnection的所有数据操作方法(getInputStream(), getOutputStream()等等)
都会调用生成的socket连接进行处理。
HttpUrLConnection在socket超时时间内可以复用socket。
disconnect()方法会关闭HttpUrLConnection使用的socket。
HttpUrLConnection已经将实际流程与操作封装的很好,如非必要可不用考虑使用socket。
Good Bye, Readers! See You Next Post.....
相关文章推荐
- Android中网络通信方式的简单汇总(HttpURLConnection、HttpClient、Socket等)
- 【 网络爬虫】java 使用Socket, HttpUrlConnection方式抓取数据
- Android HttpURLConnection Socket Http (网络编程)
- Android HttpURLConnection Socket Http (网络编程) .
- java-下载图片(正则表达式、HttpURLConnection、流、socket综合运用)
- TCP、UDP、HTTP、Socket、HttpUrlConnection、HttpClient、Volley、OkHttp之间关系
- android 之互联网应用(socket,url,http,httpurlconnection,apache http,webview)
- httpURlConnection与Socket
- Android HttpURLConnection Socket Http (网络编程)
- [置顶] Android网络之HttpUrlConnection和Socket关系图解
- HttpUrlConnection java.net.SocketException: Software caused connection abort: recv failed
- Socket、URLConnection 和HttpURLConnection的区别
- [置顶] Android网络之HttpUrlConnection和Socket关系解析
- socket HttpURLConnection 通信异同
- 网络编程基础(socket,httpurlconnection)
- Java使用HttpURLConnection请求异常:java.net.SocketException: Software caused connection abort: recv failed
- Android中使用HttpURLConnection和HttpClient发送Http请求
- Android 使用HttpURLConnection实现多线程下载 笔记
- android HttpURLConnection网络访问
- 小码农的代码(五)----------web交互之HTTP传输HttpURLConnection