1. 前言
· 本文章是用于 个人学习过程中 整理知识点的帖子,主题为:JavaSE 网络编程 入门
· 本文章出现的 遗漏、错误 欢迎点开这篇文章的各位指出。
· 本文章的知识大纲根据 韩顺平老师 JavaSE 教学视频 进行编写。
【感谢韩顺平老师带来的优质教学和对教育作出的贡献】
2. 相关概念
● 网络 ●
· 两台或多态设备通过一定屋里设备连接起来构成了网络 。
· 根据覆盖范围,网络分为:局域网、城域网、广域网 。
● 网络通信 ●
· 网络通信是指,两台设备之间通过网络实现数据传输 。
· 简单来讲就是:将数据通过网络从一台设备传输到另一台设备 。
· 相关包:java.net
包 。
● IP地址 ●
· IP 地址 是每台计算机在网络中的唯一标识,其表示形式为:xx.xx.xx.xx 。
· IP 地址由 网络地址 和 主机地址 组成 。
● 域名 ●
· 域名是 IP 地址的直观映射 。它解决了 IP 地址 记忆紊乱的问题 。
● 端口号 ●
· 用于标识计算机上某个特定的网络程序 。其表现形式为整数形式,范围:0 ~ 65535 【2^16 - 1 位】
· 前 1024 端口 已被各大知名程序使用 。
· 网络用户通常能够通过:IP地址 + 端口号 来进入指定的服务器网络程序 。
· 例如:当用户想要使用百度的某个功能服务,那么他就会先通过域名访问IP地址,然后进入对应服务的端口号 。
3. 网络协议
● 场景模拟 ●
· 在介绍网络协议之前,我们先进行简单的场景模拟:小明和小王在路上相遇,小明打了声招呼,小王出于礼貌,也打了声招呼 。
· 我们可以看到,两人沟通交流的方式,是通过 语言传输 。
· 语言:是被全球不同语种的人们发明并制定出来的、基于一定规则的产物 。
· 因此,我们就可以把语言看作是 一种协议 。
· 主机之间传输的并非语言,是数据,而数据的组织形式,就是协议 。
● TCP/IP 协议 ●
· TCP/IP ( Transmission Control Protocol / Internet Protocol ) :传输控制协议 / 因特网互联网协议,又名:网络通讯协议 。它是因特网最基本的协议,是国际互联网的基础 。
· 该协议是由:网络层的 IP协议 和 传输层的 TCP 协议 组成的 。
● TCP 协议 与 UDP 协议 ●
· TCP 协议:传输控制协议
1. 使用TCP协议前,须先建立TCP连接,形成传输数据通道传输前,采用“三次握手"方式,是可靠的 。
2. TCP协议进行通信的两个应用进程:客户端、服务端在连接中可进行大数据量的传输传输完毕 。
3. 需释放已建立的连接,效率低 。
· UDP 协议:用户数据协议
1. 将数据、源、目的封装成数据包,不需要建立连接 。
2. 每个数据报的大小限制在64K内,不适合传输大量数据因无需连接,是不可靠的 。
3. 发送数据结束时无需释放资源,速度快 。
· 区别:TCP 协议 下的通讯类似于打电话,在双方没有结束前,不允许第三方通讯 。UDP 类似于发短信 。
4. 网络编程类
● InetAddress 类
常用方法 | 解释 |
---|---|
● Socket 类
● 基本介绍 ●
· 套接字( Socket ) 广泛应用于开发网络应用程序 。
· 其实质是 在通信主机的两端建立通信通道 。
· 通信要求是:通信两端都需要具有 Socket 套接字 。
● 相关特点 ●
· Socket 套接字 允许程序把网络连接当做一个流 ,数据在两个 Socket 之间 通过 IO 流 传输数据 。
· 一般主动发起通信的应用程序为 客户端 ;等待通信请求的为服务端 。
● 图解 ●
图片来源:@ 韩顺平教育
· TCP编程
● 基本介绍 ●
· TCP网络通信编程 是基于客户端——服务端的网络通信 。其底层使用的是 TCP/IP 协议 。
· 应用场景:客户端发送数据,服务端接收并显示控制台 。
● 过程图解 ●
● 相关细节 ●
· 在进行TCP编程时,需要注意程序执行流程:Server端 -> Client端
· 先执行 Server 端 对本机端口号进行创建和监听,等待客户端发送连接请求 。
· 再执行 Client 端 对其进行连接请求 。
· 然后根据需求模拟相应的通信流程 。
· 下面就通过 TCP编程 进行 Socket 通信 进行演示:
● 示例 1 :客户端 传输数据到 服务端 ●
● 示例 2:服务端 传输数据到 客户端 ●
相关方法:socket.shutdownOutput / socket.shutdownInput
【分别用于标记数据处理结束】
本流程是根据上一个示例进行改写
● 示例 3:使用字符流传输数据 ●
相关方法:bufferedWrite.newLine / bufferedRead.readLine
【分别用于标记数据处理结束】
● 示例 4: 实现图片传输 ●
● 相关细节 ●
· 根据上面的示例演示,我们已经了解了客户端和服务端之间的通信机制,但其实:客户端在对服务端发送请求时,也是通过一个端口来进行通信的,而这个端口是根据 TCP/IP 协议 提供的随机端口。
· 在客户端对服务端发送请求时,我们可以通过相关指令来查找他们的连接情况 。
● netstat 指令 ●
· 我们可以在 命令指示符 或 终端 中,通过 netstat 指令,查看当前主机的网络情况 。
相关指令 | 解释 |
---|---|
netstat -an | 查看当前主机网络情况 |
netstat -an|more | 分页显示主机网络情况 |
· 下面就来查看 客户端与服务端通信 时的情况 。
本次使用 示例 4 来进行网络情况查询
· 我们可以看到,本次客户端连接服务端的方式是TCP协议下 一个随机的端口号 51139 连接到 9999 端口
· 此时的状态是ESTABLISHED
也就是 连接状态
· UDP编程
● 基本介绍 ●
· UDP 编程是基于 DatagramSocket
和 DatagramPacket
类 实现的 。它们实现了基于 UDP 协议网络程序 。
· UDP数据报通过 数据报套接字 DatagramSocket 发送和接收 。
· 系统不保证UDP数据报一定能够安全送到目的地,也不能确定什么时候可以抵达。所以它是不可靠的 。
· DatagramPacket 对象封装了UDP数据报:其中包含了 发送端 和 接收端的 IP地址和端口号 。
· UDP协议中每个数据报都给出了完整的地址信息,因此无须建立发送方和接收方的连接 。
· 下面就通过 UDP编程 进行 Socket 通信 进行演示:
● 示例 1 :发送端 接收端 数据通信 ●