目录
一. 网络编程基本概念
1. 什么是网络编程
网络编程, 是指网络上的主机, 在不同进程之间, 通过编程的方式实现网络通信 (网络数据传输) 的过程.
[注]: 网络通信只要满足不同进程就可以. 不一定必须要不同主机, 同一主机的不同进程之间也可以实现网络通信.
2. 发送端和接收端
发送端: 即数据的发送方进程. 发送端主机就是网络通信中的源主机.
接收端: 即数据的接收方进程. 接收端主机就是网络通信中的目的主机.
3. 请求和响应
一般来说, 客户端获取一个网络资源, 涉及到两次网络数据传输.
第一次: 请求数据的发送.
第二次: 响应数据的接收.
4. 客户端和服务端
客户端: 请求服务的一方.
服务端: 提供服务的一方.
二. Socket 套接字
Socket套接字可以理解为网络通信中的基本操作单元. 它可以看做是传输层提供给应用层的一种API, 应用层所有网络通信都是基于socket实现的. 基于socket进行的网络程序开发就是网络编程.
根据传输协议的不同, socket又分为两种:
- 流套接字 : 使用TCP协议 (Transmission Control Protocol "传输控制协议").
TCP的特点是: 有连接, 可靠传输, 面向字节流, 全双工.
- 数据报套接字: 使用UDP协议 (User Datagram Protocol "用户数据报协议")
UDP的特点是: 无连接, 不可靠传输, 面向数据包, 全双工.
(1) 有连接 / 无连接 : 指的是如果通信双方保存了对端的信息, 就叫做有连接; 如果通信双方没有保存对端的信息, 就叫做无连接.
(2) 可靠 / 不可靠 传输: 这里的可靠并不是指100%能够传输到对端, 而是尽可能保证数据能够到达对端; 而不可靠传输就是完全不考虑数据能否到达对端.
(3) 面向字节流 / 面向数据报 : 面向字节流 --> 传输数据的基本单位是字节; 面向数据报 --> 传输数据的基本单位是数据报.
(4) 全双工 / 半双工 : 全双工指的是一个通信链路可以发送数据, 也可以接收数据 (双向通信); 半双工指的是一个通信链路只能发送数据或只能接收数据 (单向通信).
1. UDP
(1) DatagramSocket
<1> DatagaramSocket 常用构造方法
无参数的构造方法 --> 构造一个Socket对象, 绑定的端口由系统指定.
带一个参数port的构造方法 --> 构造一个Socket对象, 并绑定指定端口.
通过DatagramSocket 类可以创建一个socket对象, 程序员通过socket对象就能间接操作网卡.
<2> DatagramSocket 常用方法
receive方法, 传入一个DatagramPacket类型的参数, 表示接收此数据报.
send方法, 传入一个DatagramPacket类型的参数, 表示发送此数据报.
close()方法, 无参数, 表示关闭当前Socket对象, 释放资源.
(2) DatagramPacket
<1> DatagramPacket 常用构造方法
构造一个DatagramPacket对象用来接收数据报, 接收到的数据报存到字节数组buf中, 指定长度为length.
构造一个DatagramPacket对象用来发送数据报, 发送的数据为字节数组中从0到指定长度length的数据. address指定目的主机的IP和端口号.
一个DatagramPacket对象就相当于一个UDP数据报.
<2> DatagramPacket 常用方法
从接收到的数据报中, 获取发送端的IP地址. (从发送的数据报中, 获取接收端的IP地址).
从接收到的数据报中, 获取发送端主机的端口号. (从发送的数据报中, 获取接收端主机的端口号).
获取数据报中的数据, 返回一个字节数组.
2. TCP
[注]: TCP的核心类也是两个: SeverSocket 和Socket. SeverSocket是专门给服务器使用的. Socket既能给服务器使用, 也能给客户端使用.
(1) SeverSocket
<1> SeverSocket 常用构造方法
创建一个服务器Socket对象, 并绑定到指定端口.
<2> SeverSocket 常用方法
与客户端建立连接.
关闭该SeverSocket对象, 释放资源.
(2) Socket
<1> Socket 常用构造方法
创建一个Socket对象, 并绑定到指定主机上的指定端口号.
<2> Socket 常用方法
获取该Socket对象所绑定的地址.
返回该Socket对象的输入流.
返回该Socket对象的输出流.