网络编程概念
网络编程概述
网络编程三要素
1、确定发给哪个接收端(IP地址)
2、确定发给接收端中的哪个应用程序(端口号)
3、确定网络中传输数据的规则(协议)
IP地址介绍
IP地址:指互联网协议地址(Internet Protocol Address),俗称IP。
IP地址是设备在网络中的地址,是唯一的标识。
假如我们把“个人电脑”比作“一台电话”的话,那么“IP地址”就相当于“电话号码”
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以上的端口号就可以了。
注意:一个端口号只能被一个应用程序使用。
协议介绍
协议:计算机网络中,连接和通信的规则被称为网络通信协议
UDP协议: 用户数据报协议(User Datagram Protocol)
不需要连接
速度快
有大小限制一次最多发送64K
易丢失数据。
TCP协议: 传输控制协议 (Transmission Control Protocol)
需要连接
速度慢
没有大小限制
不易丢失数据
总结(网络编程只看这个)
网络编程
就是可以让两台计算机进行数据交互。
网络编程三要素
1.IP地址:设备在网络中唯一的标识。
2.端口号:应用程序在设备中唯一的标识。
3.协议:数据在传输过程中遵守的规则。
UDP通信程序
InetAddress的使用.
为了方便我们对IP地址的获取和操作,Java提供了一个类InetAddress供我们使用
InetAddress:此类表示Internet协议(IP)地址
UDP通信介绍
UDP协议通信是不需要连接的,相当于我们生活中的寄快递,直接寄出即可。
TCP通信程序(重)
TCP通信原理
TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象。
通信之前要保证连接已经建立。(TCP三次握手)
通过Socket产生IO流来进行网络通信。
TCP通信流程
TCP协议通信是需要连接的,建立连接后以流的形式传输。相当于打电话。
TCP客户端步骤
- 创建客户端Socke对象,与指定服务端连接
Socket(String host, int port)
2. 得到输出流写数据
OutputStream getOutputStream()
3. 得到输入流读取数据
InputStream getInputStream()
4. 关闭资源
void close()
TCP服务端步骤
- 创建TCP服务端ServerSocket对象。
ServerSocket(int port)
2. 监听客户端的连接,连接成功返回一个Socket对象。
Socket accept()
3.得到输入流读取数据。
InputStream getInputStream()
4.得到输出流写数据。
OutputStream getOutputStream()
5.关闭资源
void close()
文件上传案例
1.创建客户端
2.创建文件输入流
3.得到Socket的输出流
4.循环读写数据
5.得到Socket输入流读取数据
6.关闭资源
模拟B\S服务器
NIO 了解
NIO概述
JDK1.4以前:InputStream/OutputStream称为BIO(Blocking IO) 阻塞式IO BIO
JDK1.4推出了一套新的IO体系称为NIO (New IO/ Not Blocking IO) 非阻塞式IO
阻塞,非阻塞概念
阻塞和非阻塞都是处理IO数据的方式
阻塞:如果没有数据就一直等待
非阻塞:如果没有数据,不会一直等待,可以做其他事情
非阻塞的好处,不需要一直等待,当有数据来才需要处理,没有数据可以做其他操作
BIO模型
BIO是同步阻塞模型,一个客户端连接对应一个处理线程。
在BIO中,accept和read方法都是阻塞操作,如果没有连接请求,accept方法阻塞;如果无数据可读取,read方法阻塞。
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(缓冲区)可以保存要发送和接收的各种数据,操作灵活,效率较高。
Selector 选择器(相等于门卫大爷),可以管理多个连接
使用了多路复用,只需要一个线程就可以处理
多个通道,降低内存占用率,减少CPU切换时间,
在高并发、高频段业务环境下有非常重要的优势 。
commons-io工具包(重)
commons-io概述
commons-io是apache开源基金组织提供的一组有关IO操作的类库,可以提高IO功能开发的效率。
commons-io工具包提供了很多有关io操作的类。有两个主要的类FileUtils, IOUtils
commons-io使用
导入commons-io-2.6.jar
①在项目中创建一个文件夹:lib
②将commons-io-2.6.jar文件复制到lib文件夹
③在jar文件上点右键,选择 Add as Library -> 点击OK
④在类中导包使用