UrlConnection连接和Socket连接的区别
来源:互联网 发布:安卓节拍器软件 编辑:程序博客网 时间:2024/05/17 23:20
关于UrlConnection连接和Socket连接的区别,只知道其中的原理如下:
抽象一点的说,Socket只是一个供上层调用的抽象接口,隐躲了传输层协议的细节。
urlconnection 基于Http协议,Http协议是应用层协议,对传输层Tcp协议进行了封装,是无状态协议,不需要你往考虑线程、同步、状态治理等,内部是通过socket进行连接和收发数据的,不过一般在数据传输完成之后需要封闭socket连接。
直接使用Socket进行网络通讯得考虑线程治理、客户状态监控等,但是不用发送头信息等,更省流量。
并不知道我们经常使用的URLConnection 内部是怎么实现的,今天心血来潮以URL为出发点来探个究竟。
以下面这段代码为出发点
URL url = new URL("http://zhoujianghai.iteye.com");
URLConnection conecttion = (URLConnection)url.openConnection();
根据java.net.URL源码,一步步进行分析,
new URL("www.javaeye.com")会调用URL(URL context, String spec, URLStreamHandler handler),
此时context和handler是null。
url.openConnection()调用的是strmHandler.openConnection(this);
而strmHandler是URLStreamHandler接口的子类的实例。
抽象类 URLStreamHandler 是所有流协议处理程序的通用超类,可以通过不同 protocol 的 URL 实例,产生 java.net.URLConnection 对象。
由于context和handler是null,所以终极根据具体的协议调用URL类中的setupStreamHandler()方法对strmHandler进行初始化。
下面分析 setupStreamHandler()方法内的代码。
?
?
?
?
首先通过java.protocol.handler.pkgs 来设置 URLStreamHandler 实现类的包路径,SUN 的 JDK 内部实现类均是在 sun.net.www.protocol. 包下。
关于sun/net/www/protocol/http包下相关类的源码,可以访问:http://www.docjar.org/docs/api/sun/net/www/protocol/http/package-index.html
PriviAction 部分源码:
将调用下面的Handler类的实例的openConnection(URL u)方法。
@Override
此时会创建HttpURLConnectionImpl对象。HttpURLConnectionImpl是java.net.HttpURLConnection的子类。 该类有个成员变量HttpConnection connection;
这才是我们要找的,该类对Socket进行了封装。
HttpConnection 部分源码如下:
private Socket socket;
四周是相关类的源码。
可以往这个链接地址查找更多类的源码:
http://www.docjar.com/projects/apache-harmony-6.0-src-r917296-snapshot-code.html
- UrlConnection连接和Socket连接的区别
- UrlConnection连接和Socket连接的区别
- UrlConnection连接和Socket连接的区别
- UrlConnection连接和Socket连接的区别
- UrlConnection连接和Socket连接的区别
- UrlConnection连接和Socket连接是有区别的
- 计算机网路复习系列:UrlConnection连接和Socket连接的区别
- socket连接和http连接的区别
- socket连接和http连接的区别
- socket连接和http连接的区别
- socket连接和http连接的区别
- socket连接和http连接的区别
- socket连接和http连接的区别
- Socket连接和HTTP连接的区别
- socket连接和http连接的区别
- socket连接和http连接的区别
- socket连接和http连接的区别
- socket连接和http连接的区别
- 关于IIS7.5下的web.config配置的一些问题
- 007——javamail带附件发送邮件
- RxJava入门
- Java高并发(一)-- 秒杀
- ExecutorService中submit和execute的区别
- UrlConnection连接和Socket连接的区别
- tensorflow从0开始(7)——利用tensorflow进行开发的准备工作
- CALayer 的简介 和Core Animation动画效果 A
- Android WebSocket通信通过Service来绑定
- 把内容分享到腾讯微博
- DLL注入--设置消息钩子
- hdu 5601 N*M bulbs(找规律)
- 何为“超精简”(超晶简)版软件?何为“懂你版”?
- Unity 怎么修改虚拟键盘上的按钮文字