zoukankan      html  css  js  c++  java
  • Java网络编程一:基础知识详解

    网络基础知识

    1、OSI分层模型和TCP/IP分层模型的对应关系

    这里对于7层模型不展开来讲,只选择跟这次系列主题相关的知识点介绍。

    2、七层模型与协议的对应关系

           网络层   ------------     IP(网络之间的互联协议)

           传输层   ------------     TCP(传输控制协议)、UDP(用户数据报协议)

           应用层   ------------     Telnet(Internet远程登录服务的标准协议和主要方式)、FTP(文本传输协议)、HTTP(超文本传送协议)

    3、IP地址和端口号

    1、ip地址用于唯一标示网络中的一个通信实体,这个通信实体可以是一台主机,可以是一台打印机,或者是路由器的某一个端口。而在基于IP协议网络中传输的数据包,必须使用IP      地址来进行标示。ip地址就像写一封信,必须指定收件人的地址一样。每个被传输的数据包中都包括了一个源IP和目标IP。

    2、ip地址唯一标示了通信实体,但是一个通信实体可以有多个通信程序同时提供网络服务。这个时候就要通过端口来区分开具体的通信程序。一个通信实体上不能有两个通信程序        使用同一个端口号。

        IP地址和端口号,就像一个出差去外地入住酒店一样,IP地址表示了酒店在具体位置,而端口号则表示了这个人在酒店的房间号。

    4、TCP和UDP

    1、TCP是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。它能够提供两台计算机之间的可靠的数据流,HTTP、FTP、Telnet等应      用都需要这种可靠的通信通道。

    2、UDP是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传送目的地,至于能够达到目的地,达到目的地的时     间以及内容的正确性都是不能保证的。

    既然有了保证可靠传输的TCP协议,为什么还要非可靠传输的UDP协议呢?原因有两个:

    1、可靠的传输是要付出代价的,对数据内容的正确性的检验必然会占用计算机处理时间和网络带宽。因此TCP的传输效率不如UDP高。

    2、许多应用中并不需要保证严格的传输可靠性,比如视频会议系统,并不要求视频音频数据绝对正确,只要能够连贯就可以了。所以在这些场景下,使用UDP更合适些。

    5、URL访问网上资源

    1、URL对象代表统一资源定位器,是指向互联网“资源”的指针。它是用协议名、主机、端口和资源组成,即满足如下格式:

         protocol://host:port/resourceName

         http://www.crazyit.org/index.php

    2、通过URL对象的一些方法可以访问该URL对应的资源:

         String getFile():获取该URL的资源名

         String getHost():获取主机名

         String getPath():获取路径部分

         int   getPort():获取端口号

     1 public static void main(String[] args) throws IOException
     2     {
     3         URL url = new URL("https://i.cnblogs.com/EditPosts.aspx?opt=1");
     4         String file = url.getFile();
     5         System.out.println(file);
     6         String host = url.getHost();
     7         System.out.println(host);
     8         int port = url.getPort();
     9         System.out.println(port);
    10         String query = url.getQuery();
    11         System.out.println(query);
    12         String protocol = url.getProtocol();
    13         System.out.println(protocol);
    14     }

    执行结果:

    1 /EditPosts.aspx?opt=1
    2 i.cnblogs.com
    3 -1
    4 opt=1
    5 https

    上面展示了URL对象的常用方法,下面来看看URL最重要的两个方法:openConnection()、openStream()

     1 public static void main(String[] args) throws IOException
     2     {
     3         URL url = new URL("http://www.baidu.com");
     4         URLConnection connection = url.openConnection();
     5         InputStream is = connection.getInputStream();
     6         OutputStream os = new FileOutputStream("c:/data.txt");
     7         byte[] buffer = new byte[1024];
     8         int flag = 0;
     9         while (-1 != (flag = is.read(buffer, 0, buffer.length)))
    10         {
    11             os.write(buffer, 0, flag);
    12         }
    13         os.close();
    14         is.close();
    15     }

    执行结果:

     

    1、代码第4行openConnection()该方法用于返回URLConnection对象,表示到URL所引用的远程连接。

    2、代码第5行getInputStream方法,用于返回从此打开的连接读取的输入流。

    3、后面的代码就是我们已经很熟悉的从输入流中读到数据,再通过输出流写入文件。

    4、执行的结果就是我们通过浏览器访问http://www.baidu.com,百度服务器返回的内容。

    5、这里是文本文件,我们将后缀修改为html,然后用浏览器访问,这样看起来更直观:

    6、InetAddress

     JAVA提供了InetAddress类来代表IP地址。

    1 public static void main(String[] args) throws IOException
    2     {
    3         InetAddress address = InetAddress.getLocalHost();
    4         System.out.println(address);
    5         address = InetAddress.getByName("www.baidu.com");
    6         System.out.println(address);
    7         
    8     }

    执行结果:

    1 WINDOWS-EC813QQ/192.168.88.1
    2 www.baidu.com/115.239.211.112
  • 相关阅读:
    jQuery Mobile的学习 jQuery Mobile工具栏、标题栏、页脚栏的定位学习
    【centOS7】centOS7上普通用户切换root用户,相互切换
    【elaseticsearch】elaseticsearch启动报错Caused by: org.elasticsearch.transport.BindTransportException: Failed to bind to [9300-9400]
    【docker】docker启动、重启、关闭命令,附带:docker启动容器报错:docker: Error response from daemon: driver failed programming external connectivity on endpoint es2-node
    【centOS】centos7 查看和关闭防火墙
    【elasticsearceh】elasticsearch.yml配置文件详解
    【docker】关于docker 中 镜像、容器的关系理解
    【xshell】xshell设置快捷键 设置Ctrl+C Ctrl+V快捷键为复制粘贴
    【docker】elasticsearch-head无法连接elasticsearch的原因和解决,集群健康值:未连接,ElasticSearch——跨域访问的问题
    【spring cloud】spring cloud Sleuth 和Zipkin 进行分布式链路跟踪
  • 原文地址:https://www.cnblogs.com/dongguacai/p/5747397.html
Copyright © 2011-2022 走看看