1. 网络相关概念
- 网络通信:两台设备之间通过网络实现数据传输;
- java.net包下提供了一系列的类或接口,完成网络通信;
局域网:覆盖一个学校、单位、公司;
城域网:覆盖一个城市;
广域网:覆盖一个国家、全球;
1.1 ip地址
- 概念:用于唯一标识网络中的每台计算机。
- 查看ip地址:ipconfig
- ip表示:对于IPv4 (一个字节8位,四个字节32位)
- ip地址的组成:网络地址(xx市xx区xx小区)+主机地址(房间号)
- IPv4地址最大的问题是网络地址资源有限,严重制约了互联网的发展
- IPv6使用128位表示地址,相当于是16个字节(128/8)
- 127.0.0.1代表的是本机地址;
1.2 域名
- 概念:将ip地址映射成域名;域名就代表ip地址,并且方便记忆
ip唯一确定主机,端口号唯一确定主机上的程序服务;
1.3 端口号
- 端口号:用于标识计算机上某个特定的网络程序;
- 表现形式:整数形式,范围0~65535(用二个字节表示端口,2^16-1);
- 0~1024已被占用,比如:ssh 22,ftp 21,smtp 25,http 80;
- 常用的网络程序端口号:tomcat(8080),mysql(3306),oracle(1521),sqlserver(1433);
1.4 网络通讯协议
- 概念:语言本身就是一种协议,在网络编程中,数据的组织形式就是协议;
- TCP协议:传输控制协议,三次握手;
- UDP协议:用户数据协议,发送数据结束时无需释放资源;
2. TCP字节流编程
2.1 InetAddress类
- getLocalHost->获取本机InetAddress对象(ip地址对象 主机名+ip地址)
- getByName->根据 主机名/域名 获取InetAddress对象(ip地址对象 主机名+ip地址)
- 获取InetAddress对象(主机名/域名+ip地址)其中的ip地址
- 获取InetAddress对象(主机名/域名+ip地址)其中的主机名/域名
2.2 Socket
- 通信的两端都要有Socket,是两台机器间通信的端点;
- 网络通信实际上就是Socket间的通信;
- Socket允许程序把网络连接看成一个流,数据在两个Socket间通过IO流传输;
2.2.1 客户端到服务端
在输出流结束的时候,设置结束标记
服务器端
客户端
2.2.1 服务端到客户端
服务端
客户端
3. TCP字符流编程
3.1 客户端到服务端
插入一个换行符,表示写入的内容结束
BufferedWriter.newLine()
字符流输出完毕后,需要手动刷新,否则数据不会进入到数据通道
BufferedWriter.flush()
客户端修改
服务端修改
3.2 服务端到客户端
客户端修改
服务端修改
4. TCP网络通信编程
5. netstat
netstat指令 | 。 |
---|---|
netstat -an | 可以查看当前主机网络情况,包括端口监听情况和网络连接情况 |
netstat -an | more | 可以分页显示 |
说明
(1)Listening 表示某个端口在监听
(2)如果有一个外部程序(客户端)连接到该端口,就会显示一条连接信息
(3)可以输入 Ctrl + C 退出命令
(4) 当客户端连接到服务端后,客户端也是通过一个端口和服务端进行通讯的,这个端口是TCP/IP来分配的,是随机的;
6. UDP网络通信编程
6.1 UDP原理
●基本介绍
- 类 DatagramSocket 和 DatagramPacket 实现了基于 UDP 的协议网络程序;
- UDP数据通过数据报套接字 DatagramSocket 发送和接收,系统不保证UDP数据报一定能够安全送到目的地,也无法确定什么时候可以抵达;
- DatagramPacket 对象封装了UDP数据报,在数据报中包含了发送端的IP地址和端口号以及接收端的IP地址和端口号;
- UDP协议中每个数据报都给出了完整的地址信息,因此无需建立发送方和接收方的连接;
●基本流程
5. 核心的两个类/对象,DatagramSocket 和 DatagramPacket;
6. 建立发送端,接收端(没有服务端和客户端概念);
7. 发送数据前,建立数据包/报 DatagramPacket对象;
8. 调用DatagramSocket的发送,接受方法;
9. 关闭DatagramSocket;
6.2 UDP网络通信编程
接收端
发送端