您现在的位置是:首页 > 技术教程 正文

JAVA全栈开发 day11-网络编程

admin 阅读: 2024-03-18
后台-插件-广告管理-内容页头部广告(手机)

计算机网络

1.什么是计算机网络

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

在这里插入图片描述

2.计算机网络主要功能

  • 资源共享

  • 信息传输与集中处理

  • 均衡负荷与分布处理

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

在这里插入图片描述

3.网络通过的三要素

ip地址

端口号

协议

4.IP地址

域名 = ip + 端口
  • 1

默认端口: 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之间。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

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

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七层模型

在这里插入图片描述

传输层协议

UDP

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

特点:

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

在这里插入图片描述

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

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

特点:

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

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

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) );

在这里插入图片描述

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(); } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

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(); } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
TCP编程

在这里插入图片描述

作业

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

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

  3. 预习多线程

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索