android实训之网络编程

   刚刚看了三个小时的主播,精力恢复了50%,发现原来主播这个职业还是有他存在的道理的,前提是播主与观众都具有一定的理智以及职业道德,或者说成人的自觉意识。    遂趁着这个时间整理一下android的网络编程的知识,不至于晚上的所有时间都荒废。

   首先需要明确的是,android通常都是通过http协议与网络交互。  因此网上众多的资源都是关于一些http协议的使用规范以及要求。  如果我没记错的话,之前在看java源码的过程中,有看到关于HttpConection源码的部分, 可以发现他要依赖于Socket实现。  Socket是java中用于网络操作的抽象,它最终的实现通过依赖操作系统完成。  具有Tcp,与 udp两种协议。   回顾一下我们学习的Tcp/Ip网络模型,物理层->数据链路层->网络层->运输层->应用层。   那么可以知道Socket是关于运输层的一个抽象,http是应用层协议的一个抽象,它是以运输层为基础的。  并且,好像c语言也有个socket的概念,也是运输层协议的抽象。  要联网别无他法,因为如今的互联网是基于tcp/ip协议的,它们最终的物理实现都要落实到网络适配器上,也就是网卡。  而驱动它的应该就是socket。   所以socket编程,应该就是网络编程,但是网络编程,可能还包括一些其它的局域的协议。

   所以从这个意义理解,将android网络编程 就直接去学习一通 http协议的用法规范,感觉是有那么一些些欠妥。。

   扯远了,继续正文整理:

网络编程核心类之HttpURLConnection:

    从它的名称看,必然是与http连接相关的。

   既然是学习这个类,那么不去看它的构成自然算不上学习过,所以便看看它的结构以及主要的方法等。

   

  在查找时,能发现一个有趣的现象,android官方包带有这个包了,但是java的核心rt包也在这里。  这不禁引起思考,当我们在类中引入了这个类,由于它们的包名是一致的,那么最后加载哪个呢????   因为一般情况下我们在开发java的时候,如果我们手动定义一个 java.lang.String类的话,加载的时候会出错。  这是因为Java的 类加载器使用了双亲委派机制,  用户定义的java.lang.String包会被类加载器识别为以被BootClassLoader加载,但是它当它被实例化的时候,会实例系统的那个String,最终会导致异常,类型不匹配,且无法强转的错误。   所以,这里的问题与刚刚的问题看起来是差不多的。  但是我们发现程序跑起来的时候并不会报错。   有几种可能性:一就是android的类加载机制不一样,具体是怎样的有空了可以查一查;  二就是,由于这两个包都是以依赖的方式存在的,它们是以同一个类加载负责的,至于加载到哪个,就看哪个在前面。实例化的时候并不影响,因为它们类型是完全相同的所以不会出错。

  此外,从这个类的关系可以看出,与其说是android的网络编程,不如说是java的网络编程。

  这里需注意,在没有中间的方法转化的情况,所有的方法都是大写形式的。  

  socket的权限支持。

 

   可以看到很多的操作都与connected属性相关,可以查看代码发现,它是URLConnection提供的一个属性,为public属性。

   它的一个核心方法有: getResponseCode  ---->  从响应头中取响应码,至于响应头的设置方法则没有直接在源码中找到。  可能是其它的机制。

 android网络编程之httpClient:

         由于已经被官方废弃,就简单看看:

  

  发现并没有在android的官方中发现这个类。  此外,也没有被废弃。

  

此外,它位于sun包,位于这个包下的内容重要性不言而喻了,很多都是最接近native的类。  

  鉴于室友已经休息了,就不继续整理了,明天接着整理下数据格式的处理就O了。

猜你喜欢

转载自blog.csdn.net/qq_36285943/article/details/82503999