网络编程概念

网络编程概述

实现不同计算机上进行数据传输的程序。
image.png

网络编程三要素

1、确定发给哪个接收端(IP地址
2、确定发给接收端中的哪个应用程序(端口号
3、确定网络中传输数据的规则(协议
image.png

IP地址介绍

IP地址:指互联网协议地址(Internet Protocol Address),俗称IP。
IP地址是设备在网络中的地址,是唯一的标识。
假如我们把“个人电脑”比作“一台电话”的话,那么“IP地址”就相当于“电话号码”
image.png
IPv4:,通常被分为4个字节,表示成 a.b.c.d 的形式,例如 192.168.65.100。其中
a、b、c、d都是0~255之间的是一个32位的二进制数十进制整数,那么最多可以表示42亿个。
IPv6:由于互联网的蓬勃发展,IP地址的需求量愈来愈大,但是网络地址资源有限,使得IP的分配越发紧张。有
资料显示,全球IPv4地址在2011年2月分配完毕。
为了扩大地址空间,拟通过IPv6重新定义地址空间,采用128位地址长度,每16个字节一组,分成8组十六进制
数,表示成 ABCD:EF01:2345:6789:ABCD:EF01:2345:6789,号称可以为全世界的每一粒沙子编上一个网址,
这样就解决了网络地址资源数量不够的问题。

查看本机IP地址

在DOS命令行输入: ipconfig
检查网络是否连通
在DOS命令行输入: pingIP地址
特殊IP地址
127.0.0.1:是回送地址也称本地回环地址,可以代表本机的IP地址,一般用来测试使用 localhost

端口介绍

我们一台电脑上会安装很多的应用程序,内网通,微信,QQ。如何找到计算机中的某个程序?
端口号:应用程序在设备中唯一的标识。
端口号:用两个字节表示的整数,它的取值范围是0~65535。
其中0~1023之间的端口号用于一些知名的网络服务或者应用。
我们自己使用1024以上的端口号就可以了。
注意:一个端口号只能被一个应用程序使用。
image.png

协议介绍

协议:计算机网络中,连接和通信的规则被称为网络通信协议
UDP协议: 用户数据报协议(User Datagram Protocol)
不需要连接
速度快
有大小限制一次最多发送64K
易丢失数据。
TCP协议: 传输控制协议 (Transmission Control Protocol)
需要连接
速度慢
没有大小限制
不易丢失数据

总结(网络编程只看这个)

网络编程
就是可以让两台计算机进行数据交互。
网络编程三要素
1.IP地址:设备在网络中唯一的标识。
2.端口号:应用程序在设备中唯一的标识。
3.协议:数据在传输过程中遵守的规则。

UDP通信程序

InetAddress的使用.

为了方便我们对IP地址的获取和操作,Java提供了一个类InetAddress供我们使用
InetAddress:此类表示Internet协议(IP)地址
image.png

UDP通信介绍

UDP协议通信是不需要连接的,相当于我们生活中的寄快递,直接寄出即可。
image.png
image.png

image.png

image.png

TCP通信程序(重)

TCP通信原理

TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象。
通信之前要保证连接已经建立。(TCP三次握手)
通过Socket产生IO流来进行网络通信。
image.png
image.png

TCP通信流程

TCP协议通信是需要连接的,建立连接后以流的形式传输。相当于打电话。
image.png

TCP客户端步骤

  1. 创建客户端Socke对象,与指定服务端连接
    Socket(String host, int port)
    2. 得到输出流写数据
    OutputStream getOutputStream()
    3. 得到输入流读取数据
    InputStream getInputStream()
    4. 关闭资源
    void close()
    image.png

    TCP服务端步骤

  2. 创建TCP服务端ServerSocket对象。
    ServerSocket(int port)
    2. 监听客户端的连接,连接成功返回一个Socket对象。
    Socket accept()
    3.得到输入流读取数据。
    InputStream getInputStream()
    4.得到输出流写数据。
    OutputStream getOutputStream()
    5.关闭资源
    void close()
    image.png

    文件上传案例

    image.png

1.创建客户端
2.创建文件输入流
3.得到Socket的输出流
4.循环读写数据
5.得到Socket输入流读取数据
6.关闭资源
image.png

文件上传TCP服务端
image.png
文件上传加强版
image.png

模拟B\S服务器

image.png

NIO 了解

NIO概述

JDK1.4以前:InputStream/OutputStream称为BIO(Blocking IO) 阻塞式IO BIO
JDK1.4推出了一套新的IO体系称为NIO (New IO/ Not Blocking IO) 非阻塞式IO

阻塞,非阻塞概念

阻塞和非阻塞都是处理IO数据的方式
阻塞:如果没有数据就一直等待
非阻塞:如果没有数据,不会一直等待,可以做其他事情
非阻塞的好处,不需要一直等待,当有数据来才需要处理,没有数据可以做其他操作
image.png

BIO处理数据image.png

BIO模型

BIO是同步阻塞模型,一个客户端连接对应一个处理线程。
在BIO中,accept和read方法都是阻塞操作,如果没有连接请求,accept方法阻塞;如果无数据可读取,read方法阻塞。image.png

NIO 3个角色


Buffer缓存
用于存储数据,底层基于数组实现,针对8种基本类型提供了对应的缓冲区类。
Buffer相当于之前BIO的byte[],但效率更高,功能更强大。
Channel通道
用于进行数据传输,面向缓冲区进行操作,支持双向传输。
数据可以从Channel读取到Buffer中,也可以从Buffer写到Channel中。
Selector选择器
Selector也叫多路复用器,使用一个线程高效地管理多个Channel(即多个客户连接)。
当向一个Selector中注册Channel后,Selector内部就可以自动不断地查询这些注册的Channel是否有已就绪的 I/O 事件。当某个Channel上面发生了读或写事件,这个Channel就会被Selector监听到,然后通过SelectionKeys可以获取就绪Channel的集合,进行后续的I/O操作。

NIO特点

BIO以流的方式处理数据,BIO的流是单向的,读取数据和写出数据的流是不同的。
Channel(通道)可以双向传输数据。
Buffer(缓冲区)可以保存要发送和接收的各种数据,操作灵活,效率较高。
image.png
Selector 选择器(相等于门卫大爷),可以管理多个连接
使用了多路复用,只需要一个线程就可以处理
多个通道,降低内存占用率,减少CPU切换时间,
在高并发、高频段业务环境下有非常重要的优势 。image.png

commons-io工具包(重)

commons-io概述

commons-io是apache开源基金组织提供的一组有关IO操作的类库,可以提高IO功能开发的效率。
commons-io工具包提供了很多有关io操作的类。有两个主要的类FileUtils, IOUtils
image.png

commons-io使用

导入commons-io-2.6.jar
①在项目中创建一个文件夹:lib
②将commons-io-2.6.jar文件复制到lib文件夹
③在jar文件上点右键,选择 Add as Library -> 点击OK
④在类中导包使用