网络编程:在网络通信协议下,不同计算机上运行的程序,可以进行数据传输
网络编程三要素
IP地址:设备在网络中的地址,是唯一的标识。是分配给上网设备的数字标签。
端口:应用程序在设备中唯一的标识。
协议:数据在网络中传输的规则,常见的协议有UDP协议和TCP协议。
常用命令:
⚫ ipconfig:查看本机IP地址
⚫ ping IP地址:检查网络是否连通
特殊IP地址:
⚫ 127.0.0.1:是回送地址也称本地回环地址,可以代表本机的IP地址,一般用来测试使用
加一个ipv4的分类,需要讲A-E,IP组成为:网络号 + 主机号广域网 城域网 局域网最大的广域网是因特网
添加组播地址,广播地址
InetAddress 的使用:此类表示Internet协议(IP)地址
static InetAddress getByName(String host) 确定主机名称的IP地址。主机名称可以是机器名称,也可以是IP地址
String getHostName() 获取此IP地址的主机名
String getHostAddress() 返回文本显示中的IP地址字符串
端口:应用程序在设备中唯一的标识。
端口号:用两个字节表示的整数,它的取值范围是065535。其中01023之间的端口号用于一些知名的网络服务或者应用。我们自己使用1024以上的端口号就可以了。注意:一个端口号只能被一个应用程序使用。
协议:计算机网络中,连接和通信的规则被称为网络通信协议
UDP协议
⚫ 用户数据报协议(User Datagram Protocol)
⚫ UDP是面向无连接通信协议。速度快,有大小限制一次最多发送64K,数据不安全,易丢失数据。
TCP协议
⚫ 传输控制协议 (Transmission Control Protocol)
⚫ TCP协议是面向连接的通信协议。速度慢,没有大小限制,数据安全。
UDP发送数据
UDP接收数据
UDP的三种通信方式
⚫ 单播
⚫ 组播
⚫ 广播
UDP通信组播代码实现
组播地址:224.0.0.0 ~ 239.255.255.255
其中224.0.0.0 ~ 224.0.0.255 为预留的组播地址
单播的发送端
① 创建发送端的Socket对象(DatagramSocket)
② 创建数据,并把数据打包(DatagramPacket)
③ 调用DatagramSocket对象的方法发送数据
注意:在单播中,这里是发给指定IP的电脑但是在组播当中,这里是发给组播地址
④ 释放资源
单播的接收端:
① 创建接收端的Socket对象(DatagramSocket)DatagramSocket ds = new DatagramSocket(10086);
② 创建一个箱子,用于接收数据DatagramPacket dp = new DatagramPacket(new byte[1024], 1024);
③ 调用DatagramSocket的方法接收数据并将数据放入箱子中ds.receive(dp);
④ 解析数据包,并把数据在控制台显示byte[] data = dp.getData();System.out.println(new String(data,0,dp.getLength()));new MulticastSocket(10086);
⑤ 释放资源
UDP通信广播代码实现
① 创建发送端的Socket对象(DatagramSocket)
② 创建数据,并把数据打包(DatagramPacket)
③ 调用DatagramSocket对象的方法发送数据
注意:在单播中,这里是发给指定IP的电脑但是在广播当中,这里是发给广播地址
④ 释放资源
广播地址:255.255.255.255
TCP通信协议是一种可靠的网络协议,它在通信的两端各建立一个Socket对象。通信之前要保证连接已经建立。通过Socket产生IO流来进行网络通信。
TCP发送数据步骤
① 创建客户端的Socket对象(Socket)与指定服务端连接Socket(String host, int port)
② 获取输出流,写数据OutputStream getOutputStream()
③ 释放资源void close()
TCP接收数据
① 创建服务器端的Socket对象(ServerSocket)ServerSocket(int port)
② 监听客户端连接,返回一个Socket对象Socket accept()
③ 获取输入流,读数据,并把数据显示在控制台InputStream getInputStream()
④ 释放资源void close()
三次握手
四次挥手
我们之前学习的IO,称之为:BIO(Blocking IO)阻塞型IO。NIO(Non Blocking IO) 非阻塞性IO
BIO与NIO的区别
NIO之缓冲区
static ByteBuffer allocate(长度) 创建byte类型的缓冲区
static ByteBuffer wrap(byte[] array) 创建一个有内容的byte类型缓冲区
将数据添加到缓冲区
获取缓冲区中的数据
rewind() 将position设置为0,可以重复读
clear() 数据读写完毕(读->写)
array() 将缓冲区转换成字节数组返回
获取缓冲区里面数据之前,需要调用flip方法
再次写数据之前,需要调用clear方法,但是数据还未消失,等再次写入数据,被覆盖了才会消失。
NIO之通道
NIO之选择器
选择器改写服务端
非阻塞的HTTP服务器
就是NIO服务器.HTTP:互联网传输数据的一种规则
HTTP协议
是互联网传输数据的一种规则。是基于TCP/IP协议由请求和响应组成
URL统一资源定位符
组成:协议 域名 端口号 请求资源路径(URI统一资源标识符)
抓包工具
HTTP请求协议
HTTP响应协议
HTTP服务器
封装请求头
封装响应