JAVA全栈开发 day11-网络编程

计算机网络

1.什么是计算机网络

把分布在不同地理区域的计算机与专门的外部设备用通信线路互连成一个规模大、功能强的网络系统,从而使众多的计算机可以方便地互相传递信息,共享硬件、软件、数据信息等资源。

JAVA全栈开发 day11-网络编程_第1张图片

2.计算机网络主要功能

  • 资源共享

  • 信息传输与集中处理

  • 均衡负荷与分布处理

  • 综合信息服务 (www/综合业务数字网络 ISDN)

JAVA全栈开发 day11-网络编程_第2张图片

3.网络通过的三要素

ip地址

端口号

协议

4.IP地址

域名 = ip + 端口

默认端口: 80

两个命令:

ping ip地址/域名 //查看是否与指定的ip 连接通

ipconfig : 查看本机的网络信息,包括有自己ip地址

ip地址两类:

ipv4 , ipv6

  • IPv4: 是一个32位的二进制数,通常被分为4个字节,表示成a.b.c.d 的形式,例如192.168.65.100 。其中a、b、c、d都是0~255之间的十进制整数,那么最多可以表示42亿个。

  • IPv6:由于互联网的蓬勃发展,IP地址的需求量愈来愈大,但是网络地址资源有限,使得IP的分配越发紧张。

为了扩大地址空间,拟通过IPv6重新定义地址空间,采用128位地址长度,每16个字节一组,分成8组十六进制数,表示成ABCD:EF01:2345:6789:ABCD:EF01:2345:6789,号称可以为全世界的每一粒沙子编上一个网址,这样就解决了网络地址资源数量不够的问题。

  • IP地址:

    ​ 网络计算机的唯一标识

    ​ 计算机底层只能识别二进制数据,所以我们的ip地址应该是一个二进制数据

  • IP地址的组成 :

    ​ 网络号段 + 主机号段

  • IP地址分类: IP地址根据网络号和主机号来分,分为A、B、C三类及特殊地址D、E。 全0和全1的都保留不用。

A类:(1.0.0.0-126.0.0.0)  (默认子网掩码:255.0.0.0或 0xFF000000)第一个字节为网络号,后三个字节为主机号。该类IP地址的最前面为“0”,所以地址的网络号取值于1~126之间。一般用于大型网络。
       
B类:(128.0.0.0-191.255.0.0)(默认子网掩码:255.255.0.0或0xFFFF0000)前两个字节为网络号,后两个字节 为主机号。该类IP地址的最前面为“10”,所以地址的网络号取值于128~191之间。一般用于中等规模网络。 
      
       
C类:(192.0.0.0-223.255.255.0)(子网掩码:255.255.255.0或 0xFFFFFF00)前三个字节为网络号,最后一个 字节为主机号。该类IP地址的最前面为“110”,所以地址的网络号取值于192~223之间。一般用于小型网络。 
       
D类:是多播地址。该类IP地址的最前面为“1110”,所以地址的网络号取值于224~239之间。一般用于多路广播用户[1] 。
       
E类:是保留地址。该类IP地址的最前面为“1111”,所以地址的网络号取值于240~255之间。 

私有地址(不再互联网上使用,而是局域中使用):

10.x.x.x

192.168.x.x

172.16.0.0 - 172.31.255.255

5.端口号

网络的通信,本质上是两个进程(应用程序)的通信。每台计算机都有很多的进程,那么在网络通信时,如何区分这些进程呢?

如果说IP地址可以唯一标识网络中的设备,那么端口号就可以唯一标识设备中的进程(应用程序)了。

  • **端口号:用两个字节表示的整数,它的取值范围是065535**。其中,01023之间的端口号用于一些知名的网络服务和应用,普通的应用程序需要使用1024以上的端口号。如果端口号被另外一个服务或应用所占用,会导致当前程序启动失败。

利用协议+IP地址+端口号 三元组合,就可以标识网络中的进程了,那么进程间的通信就可以利用这个标识与其它进程进行交互。

网络默认端口:80

6.协议

OSI七层模型

JAVA全栈开发 day11-网络编程_第3张图片

传输层协议

UDP

UDP (User Datagram Protocol) : 用户数据报协议,用于传输层,作用: 发送IP 数据包

特点:

无连接,不安全(不可靠), 传输速度快

JAVA全栈开发 day11-网络编程_第4张图片

TCP( 三次握手,四次挥手)

TCP(Transmission Control Protocol): 传输控制协议,用于传输层 , 和IP协议共同使用

特点:

面向连接, 可靠(安全性),字节流,传输较慢

JAVA全栈开发 day11-网络编程_第5张图片

JAVA全栈开发 day11-网络编程_第6张图片
JAVA全栈开发 day11-网络编程_第7张图片

7.Socket

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

Socket(套接字),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口

类型:

流式套接字、数据报套接字和原始套接字

Socket 原理

  1. 通信的两端都有Socket

  2. 网络之间的通信就是Socket间的通信

  3. 数据在两Socket间通过IO传输

UDP编程

InetAddress : java中提供的一个类,此类表示Internet协议(IP)地址。

键盘录入数据(可以替换Scanner): BufferedReader br = new BufferedReader (new InputstreamReader(system.in) );

JAVA全栈开发 day11-网络编程_第8张图片

udp发送

public class UDPSend {
    public static void main(String[] args) throws IOException {
        /*
        * UDP发送数据
            1.创建发送端的Socket
            * 2.创建数据,打包成数据报
            * 3.调用Socket中的发送方法
            * 4.释放资源
        * */
        //1.创建发送端的Socket DatagramSocket(数据报套接字)
        DatagramSocket dgs = new DatagramSocket();
        Scanner sc = new Scanner(System.in);
         while (true){
             // 组包(数据报包)
             System.out.println("请输入你要发送的数据");
             String str = sc.next();
             if(str.equals("886")){
                 dgs.close();
                 break;
             }
             byte[] buf = str.getBytes();
             InetAddress address = InetAddress.getByName("localhost");
             // 本机   localhost   127.0.0.1
             //2.2.创建数据,打包成数据报
             DatagramPacket dp = new DatagramPacket(buf,0,buf.length, address,8888);
             //3.调用Socket中的发送方法
             dgs.send(dp);
         }
        //4.释放资源
       // dgs.close();
    }
}

udp接收

public class UDPRecive {
    public static void main(String[] args) throws IOException {
        /*
        * UDP接收数据
            1.创建接收端的socket
            2.创建─个数据报包(接收容器)
            * 3.调用socket接收方法
            4.解析数据,打印出来
            * 5.释放资源
        * */
        //1.创建接收端的socket
        DatagramSocket dgs = new DatagramSocket(8888);
        //2. 创建─个数据报包(接收容器)
        byte[] bytes = new byte[1024];
       while(true){
           DatagramPacket ds = new DatagramPacket(bytes,bytes.length);
           //3.调用socket接收方法
           dgs.receive(ds);
           //4.解析数据,打印出来
           // 解析发送过来的Ip地址
           InetAddress address = ds.getAddress();
           System.out.println("ip地址"+address.getHostAddress());
           System.out.println("主机名"+address.getHostName());

           //传的byte数据
           byte[] data = ds.getData();
           System.out.println(new String(data,0,ds.getLength()));
       }

        //释放资源
        //dgs.close();
    }
}
TCP编程

JAVA全栈开发 day11-网络编程_第9张图片

作业

  1. tcp 可以通过键盘输入发送多条数据

  2. 上传视频到服务端(可以测试上传其它同学的电脑)

  3. 预习多线程

你可能感兴趣的:(JAVA全栈开发学习,java,网络,php,开发语言)