12.1 网络相关概念
12.1.1 网络通信
- 概念:两台设备之间通过网络实现数据传输
- 网络通信:将数据通过网络从一台设备传输到另一台设备。
- java.net包提供了一系列接口,供编程使用,往后曾网络通信。
12.1.2 网络
- 概念:两台或多态设备通过一定物理设备连接起来就构成了网络。
- 分类:根据覆盖范围分
- 局域网:
- 城域网
- 广域网:万维网时广域网的代表
12.1.3 IP地址
- 概念:用于唯一标识网络中的每台计算机/主机
ipconfig
:查看本机ip地址- IPV4地址表示形式:点分十进制,
xxx.xxx.xxx.xxx
- 组成:网络地址 + 主机地址
- IPV4分类:
- 本地主机地址:127.0.0.1
12.1.4 域名
- 概念:将ip地址根据http协议,映射成域名,便于记忆
- 端口号:
- 概念:用于标识计算机上某个特定的网络程序(服务)
- 表示形式:以整数表示,端口范围0~65535(216-1)
- 0~1024一般系统预留(已被占用)
- 22:ssh
- 21:ftp
- 25:smtp
- 80:http
- 常见网络程序端口号:
- 8080:tomcat
- 3306:mysql
- 1521:oracle
- 1433:sqlserver
- netstat指令:
- netstat -an:查看当前主机网络情况,包括端口监听和网络连接状态
- Listenning表示端口正在监听
- netstat -an | more:分页显示网络情况,按空格显示下一页
12.1.5 网络通信协议(TCP/IP)
- TCP:Transmission Control Protocol,传输控制协议
- 使用TCP协议前,须建立TCP连接,形成数据传输通道
- 传输前,采用“三次握手”确保连接可靠
- “三次握手”可靠后,可进行大数据量传输
- 传输完毕后,需要释放已经建立的连接,效率低。
- TCP协议通信时用到的两个应用进程:客户端、服务端
- IP:Internet Protocol,网络通讯协议
- UDP协议(用户数据协议)
- 将数据、源、目的封装成数据包,不需要建立连接
- 不可靠
- 每个数据包大小现在在64k内,不适合大数据量传输
- 传输完毕不需要释放资源,速度快
12.2 InetAddress类
getLocalHost()
:静态方法,获取本机InetAddress对象
- 返回:域名/ip地址
getByName(String host)
:根据指定主机名/域名,获取其ip地址对象getHostAddress
:通过InetAddress对象,获取其ip地址(主机名)getHostName()
:通过InetAddress对象,获取其主机名或域名
12.3 Socket(套接字)
- 组成:端口号+ip地址
- 作用:Socket允许程序把网络当成一个流,数据在两个Socket间通过IO传输
- 分类:一般将主动发起通信的应用程序成为客户端,等待通信请求的为服务端
12.3.1 TCP网络通信编程
- 必须关闭Socket,否则会造成服务器占用,导致无法连接
- ServerSocket每调用一次accept(),就会开启一个Socket,所以也必须关闭ServerSocket
- 单向数据传输(客户端单向数据流,服务器单向数据流),可不设置结束标志,可以正常通信。
- 双向数据传输,必须设置结束标志,且关闭位置必须紧邻输出流。否则服务器会阻塞,处于等待状态,无正常输出。
- 结束标志:
socket.shutdownOutput()
- 字符流输出中,可利用
newLine()
和readLine()
作为结束标志,而不使用socket.shutdownOutput()
- 当客户端连接到服务端后,客户端也会通过一个端口与服务端通讯,该端口由TCP/IP随机分配
12.3.2 UDP网络编程
DatagramSocket
类和DatagramPacket
类【数据包/数据报】实现了基于UDP协议的网络程序- UDP协议发送的数据不一定能够安全到达目的地,也不确定何时到达。
DatagramSocket
类和DatagramPacket
类的对象封装了UDP数据报,包含了发送端的IP地址和端口号,以及接收端IP地址和端口号- UDP协议的每个数据报都包含了完整的地址信息,因此无需建立发送方和接收放的连接
- 基本流程:
- 通过
DatagramSocket
建立发送端和接收端
- 没有服务端、客户端的概念
- 将数据封装到
DatagramPocket
对象 - 调用
DatagramSocket
的方法接收、发送数据 - 调用
DatagramPocket
的getData()
方法解析数据 - 关闭
DatagramSocket
- 注意:必须先启动先接收到数据的端,不然服务会一直阻塞。