网络编程


概述

网络编程,就是在一定的协议下,实现两台计算机的通信的程序

软件结构

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协议提供的服务:
      1. 认证用户和服务器,确保数据发送到正确的客户机和服务器
      2. 加密数据以防止数据中途被窃取
      3. 维护数据的完整性,确保数据在传输过程中不被改变

网络体系结构

  • 计算机网络体系结构划分为七层
  • 自下而上为:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层
    1. 物理层:硬件设备
      以太网 · 光纤 · 电缆 等
    2. 数据链路层:
      Wi-Fi(IEEE 802.11) · 令牌环 · 以太网 等
    3. 网络层协议:
      IP (IPv4 · IPv6) 等
    4. 传输层协议:
      TCP · UDP 等
    5. 应用层协议:
      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();
            }
        }
    }
}

文章作者: zrh
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 zrh !
  目录