你的位置:首页 > Java教程

[Java教程]java网络编程概述和两个描述IP的类——InetAddress类及 InetSocketAdress类

  网络编程要解决的问题:一是确认数据传输的起点和终点,我们不关注数据传输通道如何建立,这属于更底层,我们只关注通道两端的计算机的映射是如何建立的。二是确保数据传输的安全与高效,安全意味着数据不能被丢失和篡改、用算法层层封装,导致数据臃肿,导致传输成本高与低效;而确保数据的高效意味着数据要轻简传输,这使数据的安全得不到保障。所以程序员要根据不同场景取舍。

  网络编程与网页编程是不同的概念,网络编程是网页编程的底层,侧重于数据的传输。而网页编程侧重于用户,要处理的是用户能看到或直接影响用户的数据,怎么使数据对用户友好。
  网络把计算机连接到一起,局域网到城域网再到互联网。互联需要取得地址,即ip地址,取得计算机在网络上的绝对地址。两台计算机通过ip连在一起,用于传输数据,但是,一台计算机上有很多软件,我们就需要为这些软件提供一个标记,使数据能根据标记正确地发送到指定软件,这个标记被称为端口号,两个字节的整数组成,0-65536,1024以下端口号预留给了知名厂商,80是给http协议,21给ftp协议,就像生活中我们的电话号码不可以是120,即使你的电话号码是120,那么你就要烦死,每秒都有人向你求救,这会使社会混乱,会出错。同一个协议下,端口号不允许重复,在不同协议下端口号则可以重复。
  统一资源定位符是URL,统一资源是URI。两者是有区别的,URL是对资源的定位,
  数据传输协议:以什么语法传输,怎么建立链接。链接有两种方式,一是打电话,TCP——需要三次握手,面向链接,安全可靠,拨通电话才能建立链接才能传输数据,效率相对于UDP慢些;二是发邮件,UDP,不需要建立链接,发出去了就不管了,对方不需要守在电话旁,但是对方可能一个礼拜不看邮件,一年不看邮件,可能你的邮件发错地址了,发送方不管接收方是否有收到数据。注意,这两个比喻只是为了便于理解,并不是说UDP协议TCP协议传输数据的原理和打电话发邮件原理一样。TCP协议传输是排队传输,上一个没传完就不传下一个,UDP协议传输没有排队机制,没有链接使数据排队传输,数据扔过去,可能网络拥堵然后丢失一个数据,但是下一个数据继续传输,比如视频通话,网络堵塞时马赛克多,就是数据丢失了。现在网络游戏是二者的结合,重要数据用TCP,次要数据用UDP以优化用户体验。
接下来数据以什么方式传输呢?网购买的商品,卖家如何把商品发给买家呢?把原始数据(商品)发给圆通,这是应用层(细分为应用层、表示层和会话层);圆通把商品打包成快递件,扔到卡车上,发往目的地,这是传输层和网络层;卡车怎么实现从a地到b地,这是链接层;设计公路,让卡车可以跑,这是物理层。数据在层与层之间传输会封装,买家把商品给圆通时会给商品贴上收件人信息,会尽量包装商品让商品在物流过程不会损坏,这是封装,圆通把商品分类码好,搬上各个卡车,这是封装,把数据封装在卡车内传输。等等。拆封同理,卡车卸货,是拆封,买家收到商品把包装拆开是拆封。这个购物过程可以看作一个数据的传输。
  ip地址是淘宝京东这样的网店平台,是买家住址(对应到户)。端口号是淘宝店铺,是买家个人。
  TCP(transfer control protocol) UDP(userDategramProtocol),快递可以选TCP协议,即圆通协议,也可以选UDP协议,即邮递(国企,更安全一些。好吧,有点扯)。
  TCP:ServerSock卖家 Socket买家 UDP:DategramSocket DategrmPacket
数据传输过程中,底层还是流,是公路,路链接买家和卖家。所以IO是重点,但是中高级教程中把IO流封装了,不直接面对流,毕竟我们不是货车司机。

  类:InetAddress地址和域名解析 InetSocketAdress包含地址端口号
  InetAddress 对ip地址和网址解析,InetAddress的构造器是私有的,但是提供方法获得InetAddress对象
    InetAddress.getByName("www.baidu.com");
    InetAddress.getByName("223.87.1.58");这两个是静态方法。
    getHostAdress()返回IP地址,
    getHostName()返回域名。如果无法解析(如没有注册域名),返回的是IP地址
    getLocalHost()
  InetSocketAdress类,在InetAddress的基础上封装了端口号,提供了构造器。
    InetSocketAddress(String hostname,int port)构造方法
    getHostname()
    getport()得到端口号
    getAddress()

  正在学习java中级课程,因为上个礼拜的上个礼拜讲servlet时请了一个礼拜假,现在跟不上了,上礼拜没听老师讲,网易云课堂上找视频看,老师还没视频里讲的好,但是听的头昏脑胀,对servlet实现原理不清楚。现在中级课程讲完了,决定重修,所以找初级知识点看,网络编程本是初级课程,但初级老师没讲。现在,要好好学,慢慢学,不着急。