当前位置: 首页 > article >正文

# 网络编程 - 轻松入门不含糊

                                                        网络编程 - 轻松入门

  • 介绍
           网络编程指的是,在网络通信协议下。实现 不同计算机之间 的数据传输,例如 通信、聊天、视频通话 等。

1. 网络编程概述

       学习网络编程过程 中我们可以将网络编程理解为
               计算机之间的数据交互 但 前提是通过 网络协议

  • 通信协议
           规范数据交互的规则。

  • IP地址
           计算机唯一标识,就像“收件人地址”和“寄件人地址”,负责指引数据的传输路径。

  • 端口号
           应用程序的唯一标识。

  • 通信方式

    1. TCP(传输控制协议)
             面向连接,提供安全可靠 的数据传输,代价是 性能开销较高。
    2. UDP(用户数据报协议)
             无连接,更高效,代价是 可靠性较低。

2. 软件架构

① C/S 结构 (Client/Server)

  • 概念
           客户端-服务器 架构。可以理解为需要 下载 才能使用的 应用程序 所使用的架构

    在这里插入图片描述

  • 特点
           需要下载客户端应用程序。

  • 常见于
    ​        微信、QQ等。

② B/S 结构

  • 概念:浏览器-服务器架构。
  • 特点:通过浏览器访问,不需要单独安装客户端。
  • 常见场景:网页应用,如电子邮件服务。

3. 核心概念:服务器与通信协议

① 服务器

       可用于提供服务的计算机,用于处理客户端 请求 并提供 响应

  • 我们的电脑也是服务器,但是提供服务范围较小,一般是我们自己
  • 而服务器泛指范围较大的,用于托管平台,存储大量数据或支持网络应用
    1. Web服务器:提供网页浏览服务(通过 HTTP 协议)
    2. 数据库服务器:处理和管理数据存储,供客户端查询和修改。
    3. 文件服务器:提供文件存储与共享服务。
    4. 邮件服务器:管理电子邮件的发送和接收。

       服务器核心 在于接受客户端 请求 并提供 响应 的服务,这种服务是多样的

② 通信协议

       两台计算机完成数据交互需遵守通信协议:

  • TCP 协议:连接前需建立连接(三次握手),断开时需关闭连接(四次挥手),确保传输的可靠性。
  • UDP 协议:无需连接,快速但可能丢包,常用于视频通话等实时性要求较高的场景。

③ 三次握手四次挥手

       “握手”用于连接,“挥手”用于断开。以下是两者的具体过程:

  1. 三次握手(连接建立过程)
    “三次握手”指在 TCP 协议中,客户端与服务器之间建立连接的过程
    1. 第一次握手(SYN)
      客户端向服务器发送一个SYN(同步序列号)包,请求建立连接,并告诉服务器自己的初始序列号。
    2. 第二次握手(SYN-ACK)
      服务器收到SYN包后,回复一个SYN-ACK包,表示同意建立连接,同时告知自己的初始序列号。
    3. 第三次握手(ACK):
      客户端收到服务器的SYN-ACK包后,发送一个ACK包,确认服务器的序列号。此时,连接建立完成。

通过“三次握手”,双方确认了彼此的发送和接收能力

术语解释 (SYN、SYN-ACK、ACK)

  1. SYN(Synchronize:“同步”)
    可以理解为客户端向服务器发出的打招呼请求

       它的作用是发起通信请求,并告诉对方:“我准备好了,你也准备好了吗?”


  1. SYN-ACK(Synchronize-Acknowledge:“同步+确认”)
    服务器收到客户端的“打招呼”给出的回应

       它的作用是告诉客户端:“我同意通信,但需要确认你也能收到我的回应。”


  1. ACK(Acknowledge,意思是“确认”)
    是客户端收到服务器的回应后,给出的确认信息

       它的作用是告诉服务器“好的,我确认收到了你的准备,现在可以开始通信了!”
完成最后的确认,确保双方都准备好建立连接。


  1. 四次挥手(连接断开过程)
           “四次挥手”指在 TCP 协议中,客户端与服务器之间断开连接的过程
    • 第一次挥手(FIN):
             客户端发送一个FIN(终止连接)包,表示希望关闭数据传输。
    • 第二次挥手(ACK):
             服务器收到FIN包后,回复一个ACK包,表示收到了断开请求,但可能还有数据需要处理。
    • 第三次挥手(FIN):
             服务器处理完所有数据后,发送一个FIN包,表示可以断开连接。
    • 第四次挥手(ACK):
             客户端收到服务器的FIN包后,回复一个ACK包,确认连接断开。此时,连接完全关闭。

       “四次挥手”比“三次握手”多一步,是因为TCP连接是双向传输的,需要双方分别关闭自己的传输通道。

术语解释 (FIN、剩下上方已解释)

FIN(Finish:“结束”)是用来表示一方准备关闭连接的信号。

它的作用是告知对方“我已经说完了,现在想挂电话了”,并通知当前一方已经完成数据发送,准备断开连接。


4. 快速上手 UDP、TCP 网络编程程序

① Socket 套接字

**套接字Socket **

可以简单理解为:一种通信的“工具”或“接口”,用于在网络上两台计算机之间进行数据交换

  • 在编程中,它是一个“中间人”,帮助应用程序通过网络发送或接收数据。
  • 通过它,计算机之间就像打电话一样,可以 建立连接、发送消息、接收消息

打个比方

打电话给朋友 :

  • 你需要一个“电话”(套接字)才能进行交流;
  • 套接字知道对方的“电话号码”(IP 地址 + 端口号);
  • 通过这个工具,你们可以建立通信并传递信息。

所以,套接字是网络通信中应用层(程序)和传输层(协议)之间的桥梁

① UDP 编程

特点:无需建立连接,即使接收端未在线,也可发送数据。

  • 套接字类型:DatagramSocket

  • 客户端代码

// 创建 UDP 客户端,发送数据到服务器
import java.net.*;

public class UDPClient {
     public static void main(String[] args) throws Exception {
          // 1. 创建 DatagramSocket 实例
          DatagramSocket socket = new DatagramSocket();

          // 2. 准备要发送的数据
          byte[] bytes = "你好".getBytes(); // 将字符串转换为字节数组

          // 3. 指定接收端的 IP 地址和端口号
          InetAddress ip = InetAddress.getByName("127.0.0.1"); // 本地 IP 地址(回环地址)

          // 4. 创建数据报包(DatagramPacket),封装数据、目标地址和端口号
          DatagramPacket packet = new DatagramPacket(bytes, bytes.length, ip, 6666);

          // 5. 发送数据报包
          socket.send(packet);

          // 6. 关流,释放资源
          socket.close();
     }
}
  • 服务端代码
// 创建 UDP 服务端,接收客户端发送的数据
import java.net.*;

public class UDPServer {
    public static void main(String[] args) throws Exception {
        // 1. 创建 DatagramSocket 实例,并绑定到指定端口(6666)
        DatagramSocket socket = new DatagramSocket(6666);

        // 2. 准备缓冲区,用于存储接收到的数据
        byte[] bytes = new byte[1024]; // 缓冲区大小为 1024 字节

        // 3. 创建数据报包(DatagramPacket),用于接收数据
        DatagramPacket packet = new DatagramPacket(bytes, bytes.length);

        // 4. 接收数据(阻塞方法,直到接收到数据为止)
        socket.receive(packet);

        // 5. 解析接收到的数据,并打印
        System.out.println(new String(packet.getData(), 0, packet.getLength())); // 转换为字符串并输出

        // 6. 关闭套接字,释放资源
        socket.close();
    }
}


② TCP 编程

特点 传输可靠,需建立连接。

  • 套接字类型 SocketServerSocket

  • 客户端代码

// 创建 UDP 服务端,接收客户端发送的数据
import java.net.*;

public class UDPServer {
     public static void main(String[] args) throws Exception {
          // 1. 创建 DatagramSocket 实例,并绑定到指定端口(6666)
          DatagramSocket socket = new DatagramSocket(6666);

          // 2. 准备缓冲区,用于存储接收到的数据
          byte[] bytes = new byte[1024]; // 缓冲区大小为 1024 字节

          // 3. 创建数据报包(DatagramPacket),用于接收数据
          DatagramPacket packet = new DatagramPacket(bytes, bytes.length);

          // 4. 接收数据(阻塞方法,直到接收到数据为止)
          socket.receive(packet);

          // 5. 解析接收到的数据,并打印
          System.out.println(new String(packet.getData(), 0, packet.getLength())); // 转换为字符串并输出

          // 6. 关闭套接字,释放资源
          socket.close();
     }
}
  • 服务端代码
// 创建 TCP 客户端,与服务端建立连接并通信
import java.io.*;
import java.net.*;

public class TCPClient {
     public static void main(String[] args) throws Exception {
          // 1. 创建 Socket 对象,与服务端建立连接(指定服务端 IP 和端口号)
          Socket socket = new Socket("127.0.0.1", 6666); // 连接本地的 6666 端口

          // 2. 获取输出流,用于发送数据到服务端
          OutputStream os = socket.getOutputStream();
          os.write("你好,服务器".getBytes()); // 发送数据(将字符串转为字节数组)

          // 3. 获取输入流,用于接收服务端的响应
          InputStream is = socket.getInputStream();
          byte[] response = new byte[1024]; // 创建缓冲区存储响应数据
          int len = is.read(response); // 读取服务端发送的数据(阻塞方法)

          // 4. 解析响应数据,并打印
          System.out.println(new String(response, 0, len)); // 输出服务端的响应

          // 5. 关闭 Socket,释放资源
          socket.close();
     }
}

5. 小结

  1. 网络编程概述
    网络编程实现计算机之间的数据交互,依赖通信协议,核心要素包括:

    • IP地址:计算机的唯一标识。

    • 端口号:标识应用程序的入口。

    • 通信协议:TCP提供可靠连接,UDP追求高效传输。

  2. 软件架构

    • C/S架构:客户端-服务器模式,常见于微信、QQ等需安装应用的场景。

    • B/S架构:浏览器-服务器模式,适用于网页应用,如邮箱服务。

  3. 核心概念

    • 服务器:响应客户端请求的计算机,提供多样化服务(如Web、数据库)。

    • 通信协议

      • TCP:通过三次握手建立连接,四次挥手断开连接,确保传输可靠。
      • UDP:无需连接,快速高效,适合视频通话等场景。
  4. 快速上手

    • UDP编程:使用DatagramSocket快速发送数据。

    • TCP编程:基于SocketServerSocket,建立可靠连接。

end…

如果这篇文章帮到你, 帮忙点个关注呗, 不想那那那点赞或收藏也行鸭 (。•̀ᴗ-)✧ ~
在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述
                                                                                                                                   '(இ﹏இ`。)


http://www.kler.cn/a/487653.html

相关文章:

  • 【AI进化论】 如何让AI帮我们写一个项目系列:将Mysql生成md文档
  • 【Leetcode 热题 100】20. 有效的括号
  • 联邦学习中的LoRA:FedLoRA
  • 【人工智能计算机视觉】——深入详解人工智能计算机视觉之图像处理之基础图像处理技术
  • 基于phpstudy快速搭建本地php环境(Windows)
  • 基于SpringBoot实现的保障性住房管理系统
  • 杭州铭师堂的云原生升级实践
  • 【轻松学C:编程小白的大冒险】--- 选择 开发工具(IDE)Dev-c++ 03
  • 初识FPGA
  • Qt C++读写NFC标签NDEF网址URI
  • 第30天:PHP应用组件框架前端模版渲染三方插件富文本编辑器CVE审计
  • Java 语法糖详解
  • 如何评价deepseek-V3 VS OpenAI o1 自然语言处理成Sql的能力
  • 智能合约:区块链世界的自动化契约
  • 深入分析 Android BroadcastReceiver (四)
  • 创建型模式3.建造者模式
  • 【LC】169. 多数元素
  • css如何隐藏一个元素
  • 设计模式 行为型 状态模式(State Pattern)与 常见技术框架应用 解析
  • Python GDAL实战:gdaltools命令速成指南
  • 使用 C++ 实现神经网络:从基础到高级优化
  • 『SQLite』表达式操作
  • 【MySQL】MVCC详解, 图文并茂简单易懂
  • React Router底层核心原理详解
  • Nginx代理同域名前后端分离项目的完整步骤
  • 论文笔记:FDTI: Fine-grained Deep Traffic Inference with Roadnet-enriched Graph