24.java中的网络编程

1.什么是网络?

在计算机领域中网络是信息传输,接收,共享的虚拟平台,通过它把各个点,面,体的联系到一起,从而实现这些资源的共享。

      作用:信息传输,资源共享

      优点: 资源共享免费

2.OSI七层参考模型和TCP/IP四层参考模型

      计算机网络是指由通信线路互相连接的许多自主工作的计算机构成的集合体,各个部件之间以何种规则进行通信,就是网络模型研究的问题。

      网络模型一般是指OSI七层参考模型TCP/IP四层参考模型。这两个模型在网络中应用最为广泛。

      OSI七层参考模型:应用层\表示层\会话层\传输层\网络层\数据链路层\物理层

 

      TCP/IP四层参考模型:应用层、传输层、IP层【网络层】、网路接口层【网络连入层】。

 

网络接口层 :TCP/IP协议对网络接口层没有给出具体的描述,网络接口层对应着OSI参考模型的物理层和数据链路层 

网络层(IP层):网络层是整个TCP/IP协议栈的核心。它的功能是把分组发往目标网络或主机。同时,为了尽快地发送分组,可能需要沿不同的路径同时进行分组传递。因此,分组到达的顺序和发送的顺序可能不同,这就需要上层必须对分组进行排序。网络层除了需要完成路由的功能外,也可以完成将不同类型的网络(异构网)互连的任务。除此之外,互联网层还需要完成拥塞控制的功能。 

传输层(TCP层):TCP层负责在应用进程之间建立端到端的连接和可靠通信,它只存在与端节点中。TCP层涉及两个协议,TCP和UDP。其中,TCP协议提供面向连接的服务,提供按字节流的有序、可靠传输,可以实现连接管理、差错控制、流量控制、拥塞控制等。UDP协议提供无连接的服务,用于不需要或无法实现面向连接的网络应用中。

     应用层:应用层为Internet中的各种网络应用提供服务。

3.计算机网络四要素

3.1 IP地址

      IP是Internet Protocol(国际互连协议),地址表示网络中计算机的位置。处于网络中的通信设备(电脑、手机等),都会分配一个IP地址,这些设备在通信之前,首先通过通信设备的网卡接入到网络中,网卡属于一个硬件,并且所有的网卡在出厂的时候,都有一个固定的网卡地址。并且这个网卡的地址(MAC地址)全球唯一。

      查看网卡地址(MAC地址)

      在命令提示符中输入ipconfig/all 可以查询IP地址相关的详细信息。

 

   所有的网卡都有一个唯一的物理地址,但是这个地址非常的不好记,于是给每个网卡又分了一个逻辑(IP)地址。这个逻辑地址就是IP地址。通信的过程中,就可以根据这个逻辑地址找到处于网络中的这台设备。

IP地址也是对处于网络中的某个通信终端的标识。

      IP地址与域名的关系:由于IP地址也不容易记忆,,因此又给每个IP绑定了一个名称,这个名称被称为(域名)。

      [00-0C-29-7A-CA-8E]----[192.168.1.220]----https://www.baidu.com/[域名]

      本机默认的ip地址是127.0.0.1;它有一个对应的默认的域名localhost。

3.2. DNS服务器【域名解析服务器】

      域名解析分两步:

      (1)本地解析:

            在我们的操作系统中,有一个hosts文件,当输入域名之后,首先会在hosts文件中找有没有当前的域名对应的IP地址,有就会使用这个IP地址。

“C:\Windows\System32\drivers\etc\hosts”

 

      (2)如果第一步解析失败了,会到网络中的DNS服务器上进行解析。DNS服务器中会将全球所有的域名和IP设置在其中。如果DNS服务器解析失败,说明当前的域名有问题。

3.3. 协议

协议:通信双方通信的时候需要遵守的通信的规则。

      后期我们会遇到很多协议(高级协议,应用协议:http、ftp、https )。我们在java中网络编程介绍的协议属于底层协议[TCP/UDP],所有的高级协议都是基于底层协议。

3.4. 端口

我们通过IP可以找到网络中具体那个通信终端的设备。而具体需要访问这个设备中的哪个资源(软件)信息,这时由于设备中运行的资源(软件)肯定很多,这时每个资源(软件)必须再给一个唯一的编号(标识)。通过这个标识才能保证我们可以没有错误的访问到指定IP地址的具体那个资源(软件)上。

      端口:是一台设备(电脑、手机登)上某个应用程序的唯一标识。设备中运行的任何一个软件,只要启动,就肯定会有一个唯一的编号与其整个软件绑定。

      端口从0开始到65535之间。0到1024之间的端口数字已经分配给本机的操作系统的应用程序占用,因此后期我们书写程序如果需要绑定端口,这时必须大于1024

      端口其实就是进入本台计算时,访问本台计算机所运行程序的入口。

4.InterAddress类

java.net 包  InetAddress类,此类中有一个方法可以得到互联网协议 (IP) 地址。

InetAddress类定义:

public class InetAddress implements java.io.Serializable

InetAddress类的构造方法:

缺省修饰符 InetAddress (){

}

通过这个构造方法可以看出InetAddress类的构造方法是一个缺省限制修饰符修饰的,说明跨出java.net包就不能使用。因此在自己的java程序中是不能通过new+构造方法的方式创建出InetAddress类对象。因此我们就需要使用InetAddress类的静态方法来得到InetAddress类对象。

static InetAddress

getLocalHost() 返回包含有本机IP地址的InetAddress对象

static InetAddress

getByName(String host) 根据域名得到包含有该域名对应IP地址的InetAddress对象

实例方法:

 String getHostAddress()

返回 IP 地址字符串(以文本表现形式)

  String getHostName()

获取此 IP 地址的主机名。

 

例:

import java.net.InetAddress;

import java.net.UnknownHostException;



public class TestMain1 {



   public static void main(String[] args) {

     

      try {

          // 得到包含有本机IP地址的InetAddress对象

          InetAddress localHost = InetAddress.getLocalHost();

          //得到本机的IP地址

          String hostAddress = localHost.getHostAddress();

          System.out.println("本机IP地址:"+hostAddress);//192.168.0.106

          //得到本机的计算机名

          String hostName = localHost.getHostName();

          System.out.println("本机计算机名:"+hostName);//LAPTOP-C32URVB4

     

         

          //得到百度的IP地址和计算机名

          //得到包含有该域名对应IP地址的InetAddress对象

          String host="baidu.com";

          InetAddress hostAddress1 = InetAddress.getByName(host);

          //得到百度IP地址

          String bdip = hostAddress1.getHostAddress();

          System.out.println(bdip);//220.181.38.251

          //得到百度计算机名

          String bdname = hostAddress1.getHostName();

          System.out.println(bdname);//baidu.com

     

      } catch (UnknownHostException e) {

          e.printStackTrace();

      }



   }



}

5.URL和URI的区别

(1)URI,统一资源标识符(Uniform Resource Identifier, URI),表示的是web上每一种可用的资源,如 HTML文档、图像、视频片段、程序等都由一个URI进行标识的。

URI通常由三部分组成:

      ①资源的命名机制;

      ②存放资源的主机名;

      ③资源自身的名称

(2)URL是URI的一个子集。它是Uniform Resource Locator的缩写,译为“统一资源定位符”。

采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。

URL是URI概念的一种实现方式。

URL的格式由三部分组成: 

      ①第一部分是协议(或称为服务方式)。

      ②第二部分是存有该资源的主机IP地址(有时也包括端口号)。

      ③第三部分是主机资源的具体地址,如目录和文件名等

      第一部分和第二部分用“://”符号隔开,

      第二部分和第三部分用“/”符号隔开。

      第一部分和第二部分是不可缺少的,第三部分有时可以省略。 

例如:https://www.baidu.com/index.html---资源访问地址

从上面的例子来看,你可能觉得URI和URL可能是相同的概念,其实并不是,URI和URL都定义了资源是什么,但URL还定义了该如何访问资源。URL是一种具体的URI,它是URI的一个子集,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI 是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,是绝对的。

6.java中的URL类

       URL类的构造方法:

      URL(String spec) 从 String表示形成一个 URL对象。

      URL(String protocol, String host, int port, String file)创建 URL从指定对象 protocol,host,port数,和file 。

      实例方法:

      URLConnection      openConnection() 返回一个URLConnection实例,表示与URL引用的远程对象的URL 。

      InputStream      openStream() 打开与此 URL ,并返回一个 InputStream ,以便从该连接读取。

例:

import java.io.File;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.net.MalformedURLException;

import java.net.URL;



public class TestMain2 {



  

   public static void main(String[] args) throws Exception {

      String path="http://p4.itc.cn/images01/20201223/c0da9efe82a84858aef5ade7cb9cb2d0.jpeg";     

          //创建URL对象

          URL url = new URL(path);

          //创建输入流

          InputStream in = url.openStream();

          //定义一个保存读取来的数据的字节数组

          byte data[]=new byte[1024];

          //定义一个保存读取来的具体字节数

          int temp=0;

          //创建文件输出流

          File file = new File("F:"+File.separator+"hh.jpeg");

          FileOutputStream fileout = new FileOutputStream(file,true);

         

          //读取数据

          while((temp=in.read(data))!=-1){

             fileout.write(data,0,temp);

          }

          fileout.close();

          in.close(); 

   }



}

或者

import java.io.ByteArrayOutputStream;

import java.io.File;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.net.MalformedURLException;

import java.net.URL;



public class TestMain2 {



  

   public static void main(String[] args) throws Exception {

      String path="http://p4.itc.cn/images01/20201223/c0da9efe82a84858aef5ade7cb9cb2d0.jpeg";     

          //创建URL对象

          URL url = new URL(path);

          //创建输入流

          InputStream in = url.openStream();

          //定义一个保存读取来的数据的字节数组

          byte data[]=new byte[1024];

          //定义一个保存读取来的具体字节数

          int temp=0;

          //创建内存输出流对象

          ByteArrayOutputStream out = new ByteArrayOutputStream();

         

          //读取数据

          while((temp=in.read(data))!=-1){

             out.write(data,0, temp);

          }

          //把内存的东西取出来放到文件里

          File file = new File("F:"+File.separator+"hhxx.jpeg");

          FileOutputStream fileout = new FileOutputStream(file,true);

          fileout.write(out.toByteArray());

          fileout.close();

          out.close();

          in.close(); 

   }



}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java-请多指教

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值