java/android的网络总结

13 篇文章 0 订阅
11 篇文章 0 订阅

        在网络编程中只有掌握网络编程的本质才能更好的掌握网络。

        首先是网络的定义,网络说到底就是跨越计算机的信息交互,明白这一点很重要,明白这一点就明白了网络的本质。同时应明白,在传输上并没有多少知识点,关键在于协议等决定数据格式的东西上,也就是说协议才是网络编程的重中之重。因此必须掌握协议。(网络协议又称为协议,包含三要素,语法,语义,时序。协议分为Ethernet,netbeui,ipx/spx,tcp/ip,tcp/ip协议因为扩展性好,稳定安全所以是现在的主流)

        在计算机中,存在各种协议,而这种协议实训在层间关系的,完整的抽象模型是osi模式的七层模式,层间关系是由下至上,就是说要联系上层就必须经过下层,因此有时候看起来就像层与层之间的联系并没有经过底层一样。同时还应注意每一层的作用,以及不同协议的层次数量可能不同,如tcp/ip协议就是四层协议。这里要注意tcp/ip协议的应用层中的http协议,这是网络编程的重中之重,因为应用层负责程序间的交互。

        tcp/ip协议只有四层协议,分别是应用层,传输层,互联网络层,网络接口层。其中应用层用于程序间的访问,有http协议(超文本传输协议)网络通信规则,遵循请求/响应模型。传输层遵循tcp,udp等协议负责数据传输。网络互联层有ip协议(即互联网协议),他保证数据能传到目的地址(即确定数据一定是到达了,否则重发)。网络接口层负责实际的网络媒体的管理(网线等设备)。

        tcp/ip协议http协议都是基于socket的,大部分的网络应用程序都是点对点的,点就是指的服务器和客户端的程序。

        http协议等应用于应用层的协议是最常见的协议,我们常说的协议往往就是指他们,因为实际上编程时我们关心的最多的就是应用层的协议,因为其他的特别是较底层的协议实际上是很少用到的,因为在编程时底层的东西其实很多并不需要我们进行修改,而是已经封装好的,如tcp协议,ip协议等(但是真正的高手因应该了解,以便定制自己的底层协议或者入侵他人电脑)。也就是说,实际上大多情况下使用的都是应用层的协议进行的编程,只是若想控制整个网络系统就得会操作所有层。应用层有较多的协议,常见的有http,smtp,mime等。(http,udp,tcp都是基于socket概念为某类场景而扩展出的传输协议)(http中的浏览器默认端口为80,)

        若是单纯的进行网络通信,则利用socket以及基于socket扩展而来的各种协议即可,因为这只是涉及到数据以及一些指令的传输(归根到底就是数据传输),但是计算机科学是发展的,如果将很所的功能全加到一部计算机上的话,那么对于计算机本身的要求就会变得越来越高,但是在科学无法让一台计算机实现大量功能的情况下,使用分布式服务框架将功能分散到其他的计算机上是个不错的方法,这样就可以降低成本,整合可以利用的资源,但同时就需要提供一个相互调用各自资源的稳定的方法,因此就诞生了分布式服务框架,这个框架最大的特点就是各自的计算机可以调用其他的计算机的方法,相当于将某个计算机看成是黑匣子,一个提供特定的方法的黑匣子,而我们不需要关心这个黑匣子究竟是怎么实现方法的。因此除了java.net,android.net,之外还要懂得远程过程调用RPC,远程方法调用RMI,因此还需要掌握java.rmi等相关包的方法。

        RPC直接通过网络请求远程计算机上的服务而不需要了解计算机上的协议,他假设某协议存在,即RPC跨越了应用层和传输层。(RPC支持多种语言,RMI只支持java)RPC不支持对象,传递到RPC的消息必须经过外部数据语言表示XDR(external data representation)语言表示,XDR抽象了字节序类与数据类型结构之间的差异,并且RPC只能传递XDR表示的数据结构。(可以说RMI就是面向对象的java RPC)(顺便说一下,字节序指的是字节数据存储的顺序,有两种LE little endian与BE big endian,从左到右,前者由小到大,后者有大到小,后者是最自然的形式,同时也是网络存储的形式。)

        其实RPC更多地体现为一种思想,一种最常用的设计形式,即像策略模式一样,通过实现具体的网络类,再调用这个网络类的方法,这样就实现了远程对象,远程方调用。所以其实可以说这个网络类代表了要调用的程序而被操作。


        JMS是java消息服务,是一种允许应用程序创建,接受,发送,读取消息的java API,但是与RMI不同,JMS将对象异步的从一个JVM传给另一个JVM,而RMI则是只能传递参数与返回值,RMI本身是被绑定在自身的JVM中的。


        在分布式服务框架中,最基本的问题就是通讯问题,java底层领域有很多实现的技术,并且还对底层领域的技术进行过封装,先掌握基本的几种技术(java底层通讯技术有RMI,EJB,JMS,ESB,MINA,BORLAP,SOAP。封装的有HESSION,AXIS,XFIRE,HTTPINVOLKER。需要掌握的有RMI,XML-RPC,BINARY-RPC,JMS)。通讯技术是基于传输协议和网络IO实现的,传输协议是tcp,http之类的,网络IO是nio之类的,但是考虑到应用的易用,各种语言都提供了一些更加贴近应用易用的应用层协议,java中最知名的远程通信协议有:RMI,XML-RPC,BINARY-RPC,SOAP,JMS。


        SOAP简单对象访问协议,是一种简单,轻量,基于XML的协议。简单对象访问协议被设计用于web上进行结构化和固化信息的交换,是webService三要素之一,SOAP用来传递信息的格式(就是所要进行传送的数据包的格式)。


        nio,bio,aio,bio是我们平时使用的io,如InputStream,nio是new io的意思,连同aio使用的类都是使用的nio上面的类。同时作为网络传输的话,与传输协议进行匹配的话,有四种情况,分别是tcp/ip+bio,tcp/ip+nio,udp/ip+bio,udp/ip+nio,这种划分应该说是一种思想,但是实际上使用的时候使用的都是类。实际上就性质上讲他们还是io,只是使用的领域不大一样而已,但是只是类的变化而已。关键在于udp/ip的话,使用的是数据包技术,因此使用的类名中都含有datagram,tcp/ip一般就没有类名设置,同时,bio一般就是使用的socket,nio使用的是channel,至于aio则是使用的nio的类,但它的类有一个asynchronous,总的来说这些编程的类都存在于java.io,java.nio这两个包中(java.nio包的其实大多数都在java.nio.channels里面)。


         RMI远程方法调用,在这之前我们应该了解另外一个概念RPC远程过程调用,RMI就属于RPC,RMI用于调用远程对象的过程,(Runtime中的getRuntime().exec()方法能操作指令,但是自由度并不高并不能说是真正意义上的远程方法调用)RMI是一个接口,有自己的专门的包,在此基础上进行了解即可。rpc其实更多情况下是作为一个概念存在,因此才会有使用到他的思想的相关类的命名都加入rpc以表明使用了rpc思想指导设计。


       URLConnection与URL的网络编程最终还是归于tcp协议的。

       网络编程实际上使用的是最后有两条线路,一是URLConnection与URL的网络编程,二是socket与c/s的编程。


        其实网络的方面相对于网页设计来说相对较为简单,就是以上出现的各类的应用以实现实际上所想要的数据传输功能为目的进行的编程。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值