概述
网络编程,就是在一定的协议下,实现两台计算机的通信的程序
软件结构
C/S结构 :全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、迅雷等软件
- 缺点:开发,升级维护的成本高
- 好处:客户的体验度要好一些。对电脑的配置要求低
B/S结构 :全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有谷歌、火狐等 - 缺点:用户的体验度较低,对电脑的配置要求高
- 好处:开发,升级维护的成本低
网络通信协议
- 概述:计算机在通信的过程中通信双方都必须要遵守的规则,称之为网络通信协议
常见协议
- TCP通信协议
- 传输控制协议;需要建立链接,连接建立成功之后才可以通信
- 特点:
需要建立连接,传输数据安全。效率低
- UDP通信协议
- 数据报协议。不需要连理连接。数据不安全,数据有可能会丢失,效率高
- IP协议
- 网络通信时,计算机的唯一标识
- http超文本传输协议
- 信息是明文传输;连接无状态,端口号80;基于tcp协议
- https具有安全性的ssl加密传输协议
- HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全;端口号443
- SSL协议:安全套接层协议
- SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持
- SSL通过互相认证、使用数字签名确保完整性、使用加密确保机密性,以实现客户端和服务器之间的安全通讯
- 该协议由两层组成:SSL记录协议和SSL握手协议
- SSL协议提供的服务:
- 认证用户和服务器,确保数据发送到正确的客户机和服务器
- 加密数据以防止数据中途被窃取
- 维护数据的完整性,确保数据在传输过程中不被改变
网络体系结构
- 计算机网络体系结构划分为七层
- 自下而上为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
- 物理层:硬件设备
以太网 · 光纤 · 电缆 等 - 数据链路层:
Wi-Fi(IEEE 802.11) · 令牌环 · 以太网 等 - 网络层协议:
IP (IPv4 · IPv6) 等 - 传输层协议:
TCP · UDP 等 - 应用层协议:
DHCP · DNS · FTP · HTTP · SSH 等
- 物理层:硬件设备
端口号
- 应用软件在服务器中的唯一标识。用两个字节表示的整数,取值范围是0~65535。但0-1024的字节被系统占用,不能使用
- 常见端口号
- mysql:3306
- http:80
- tomcat:8080
- https:443
TCP通信协议
- 概述 TCP通信能实现两台计算机之间的数据交互,通信的两端,要严格区分为客户端(Client)与服务端(Server)
- 在Java中,提供了两个类用于实现TCP通信程序
- 客户端:
java.net.Socket
类 - 服务端:
java.net.ServerSocket
类
- 客户端:
- 在Java中,用于通信程序数据传递的类
socket.getInputStream()
输入流(读取)socket.getOutputStream()
输出流(写入)
静态资源与动态资源
- 静态资源
前端的固定页面,这里包含HTML、CSS、JS、图片等,不需要查数据库也不需要请求处理,直接就能够显示的页面,如果想修改内容则必须修改页面,但是访问效率相当高 - 动态资源
需要程序处理或者从数据库中读数据,能够根据不同的条件在页面显示不同的数据,内容更新不需要修改页面但是访问速度不及静态页面
servlet jsp asp html(Ajax)
案例(模拟tomcat服务器–半成品简易版)
public class Server {
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8850);
while (true) {
try {
// 监听客户端连接
Socket socket = serverSocket.accept();
InputStream socketInputStream = socket.getInputStream();
// 把网络字节输入流转换为字符流
BufferedReader br = new BufferedReader(new InputStreamReader(socketInputStream));
// 读取第一行
String line = br.readLine();
// 截取出访问的路径
String path = line.split(" ")[1].substring(1); // day15/reg.html
// 获取网络字节输出流
OutputStream socketOutputStream = socket.getOutputStream();
// 先把http的协议头回写给客户端
socketOutputStream.write("HTTP/1.1 200 OK\r\n".getBytes());
socketOutputStream.write("ConTent-Type:text/html\r\n".getBytes());
socketOutputStream.write("\r\n".getBytes());
// 读取浏览器请求的文件
FileInputStream fileInputStream = new FileInputStream("day3/web/"+path);
byte[] bytes = new byte[1024];
int len;
// 将文件写回给浏览器
while ((len = fileInputStream.read(bytes)) != -1) {
socketOutputStream.write(bytes, 0, len);
}
// 释放资源
fileInputStream.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}