1 网络编程
概述:网络编程就是用来实现 网络互联的 不同计算机上 运行的程序间 可以进行数据交互。即:用来实现不同电脑之间的数据通信的
三要素:
- IP地址:设备在网络中的唯一标识.
组成:网络(关)号码 + 主机地址. //例如: 192.168.10.66
分类:
局域网: 3 + 1, 即: 前3段是网关号码, 最后一段是ip地址.例如: 192.168.37.0 到 192.168.37.255 理论上来讲最大支持256个IP.
广域网: 2 + 2
城域网: 1 + 3
一个特殊的IP:127.0.0.1 本地回环(回路)地址, 即: 表示本机. - 端口号:程序在设备上的唯一标识。
**范围:**0 到 65535, 其中0 到 1023已经被系统占用了或者用作保留端口, 我们在使用端口号的时候要避开这个区间. - 协议:就是程序间进行交互, 通信的规则.
分类:
UDP: //举例: QQ群聊, 微信群聊
- 面向无连接.
- 采用数据报包的形式发送数据, 每个包的大小不能超过64KB.
- 是不安全(不可靠)协议.
- 效率相对比较高.
- 不区分服务器端和客户端, 叫: 发送端和接收端.
视频会议通常采用UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议
TCP: //举例: 打电话
- 面向有连接(三次握手)
- 采用IO流的形式发送数据, 理论上来讲数据无大小限制.
- 是安全(可靠)协议.
- 效率相对比较低.
- 区分服务器端和客户端.
第一次握手,客户端向服务器端发出连接请求,等待服务器确认。第二次握手,服务器端向客户端回送一个响应,通知客户端收到了连接请求。第三次握手,客户端再次向服务器端发送确认信息,确认连接。
完成三次握手,连接建立后,客户端和服务器就可以开始进行数据传输了。由于这种面向连接的特性,TCP协议可以保证传输数据的安全,所以应用十分广泛。例如上传文件、下载文件、浏览网页等
常用DOS指令:
- ipconfig /all 查看本机ip
- ping ip地址 -t 测试网络连接.
InetAddress类
概述:此类表示Internet协议(IP)地址
常用方法:
方法名 | 说明 |
static InetAddress getByName(String host) | 确定主机名称的IP地址。主机名称可以是机器名称,也可以是IP地址 |
String getHostName() | 获取此IP地址的主机名 |
String getHostAddress() | 返回文本显示中的IP地址字符串 |
2 UDP
概述:UDP协议是一种不可靠的网络协议,它在通信的两端各建立一个Socket对象,但是这两个Socket只是发送,接收数据的对象,因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念。Java提供了DatagramSocket类作为基于UDP协议的Socket。
发送端
- 构造方法:
方法名 | 说明 |
DatagramSocket() | 创建数据报套接字并将其绑定到本机地址上的任何可用端口 |
DatagramPacket(byte[] buf,int len,InetAddress add,int port) | 创建数据包,发送长度为len的数据包到指定主机的指定端口 |
- DatagramSocket常用方法:
方法名 | 说明 |
void send(DatagramPacket p) | 发送数据报包 |
void close() | 关闭数据报套接字 |
void receive(DatagramPacket p) | 从此套接字接受数据报包 |
- 步骤:
创建发送端的Socket对象(DatagramSocket)
创建数据,并把数据打包
调用DatagramSocket对象的方法发送数据
关闭发送端
接收端
- 构造方法:
方法名 | 说明 |
public DatagramSocket(int port) | 创建数据报套接字并将其绑定到指定端口号 |
DatagramPacket(byte[] buf, int len) | 创建一个DatagramPacket用于接收长度为len的数据包 |
- DatagramPacket常用方法:
方法名 | 说明 |
byte[] getData() | 返回数据缓冲区 |
int getLength() | 返回要发送的数据的长度或接收的数据的长度 |
- 步骤:
创建接收端的Socket对象(DatagramSocket)
创建一个数据包,用于接收数据
调用DatagramSocket对象的方法接收数据
解析数据包,并把数据在控制台显示
关闭接收端
两种方式接受键盘输入的数据:
//采用JDK封装好的类实现
Scanner sc = new Scanner(System.in);//自定义封装键盘录入
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
3 TCP
概述:Java对基于TCP协议的的网络提供了良好的封装,使用Socket对象来代表两端的通信端口,并通过Socket产生IO流来进行网络通信。Java为客户端提供了Socket类,为服务器端提供了ServerSocket类。
客户端:
- 构造方法:
方法名 | 说明 |
Socket(InetAddress address,int port) | 创建流套接字并将其连接到指定IP指定端口号 |
Socket(String host, int port) | 创建流套接字并将其连接到指定主机上的指定端口号 |
- 常用方法:
方法名 | 说明 |
InputStream getInputStream() | 返回此套接字的输入流 |
OutputStream getOutputStream() | 返回此套接字的输出流 |
服务端:
- 构造方法:
方法名 | 说明 |
ServletSocket(int port) | 创建绑定到指定端口的服务器套接字 |
- 常用方法:
方法名 | 说明 |
Socket accept() | 监听要连接到此的套接字并接受它 |