Сетевое взаимодействие - клиент-серверная архитектура, основные протоколы, их сходства и отличия. 网络交互——客户端-服务器架构、基本协议、它们的相同点和不同点。
это модель взаимодействия, при которой задачи распределяются между поставщиками ресурсов или услуг (серверами) и потребителями (клиентами). Эта модель широко используется в компьютерных сетях и позволяет эффективно управлять ресурсами и обеспечивать доступ к данным и приложениям.
是一种交互模型,其中任务在资源或服务提供者(服务器)和消费者(客户端)之间分配。 这种模式被广泛应用于计算机网络,可实现高效的资源管理以及数据和应用程序的访问。
HTTP (无状态,基于TCP,用于Web)
TCP (可靠,面向连接) vs UDP (不可靠,无连接)
FTP (文件传输), SMTP (邮件)
Socket
:客户端用于连接服务器 Клиенты используются для подключения к серверуServerSocket
:服务器端监听端口,接受连接 Серверная сторона прослушивает порт и принимает соединенияDatagramSocket
:发送/接收数据包 Отправка/получение пакетовDatagramPacket
:封装数据包(含地址和端口) Инкапсулированные пакеты (с адресом и портом)SocketChannel
用于TCP
,DatagramChannel
用于UDP
(транспортный протокол)Serializable
接口) Сериализация: объект → байтовый поток (интерфейс Serializable
)transient
忽略字段 Использовать transient
, чтобы игнорировать поляSerializable
- это интерфейс в Java, который позволяет объектам быть сериализованнымиfilter, map
(延迟执行)collect, forEach
filter, map
(延迟执行)Промежуточные
collect, forEach
(触发计算)
терминальные
list.stream().filter(x -> x > 0).map(String::valueOf).collect(Collectors.toList());
Команда (англ. Command) — поведенческий шаблон проектирования, используемый при объектно-ориентированном программировании, представляющий действие. Объект команды заключает в себе само действие и его параметры.
模式 | 用途 | 示例 |
---|---|---|
Decorator | 动态扩展功能(如Java I/O流)Функция динамического расширения | BufferedReader 包装FileReader |
Singleton | 全局唯一实例 Глобально уникальный экземпляр | 数据库连接池 |
Factory Method | 子类决定创建对象 Подклассы принимают решение о создании объектов | Collections.unmodifiableList() |
Adapter | 接口转换 преобразование интерфейса | Arrays.asList() |
Proxy | 控制对象访问(延迟加载/安全) Контроль доступа к объектам (отложенная загрузка/безопасность) | Spring AOP 代理 |
一些命令执行:
update id=1 //更新id
remove_any_by_price price=100 //删除价格为100的任何产品
remove_by_id id=1 //删除id为1的产品
实验逻辑:
客户端发送序列化数据
服务器接收数据并反序列化
Клиент отправляет сериализованные данные
Сервер получает данные и десериализует их
Сервер выполняет команду
Сервер возвращает результат выполнения команды
Клиент получает результат выполнения команды
sequenceDiagram
participant Client
participant Server
Client->>Server: 发送 ClientAddCommand 对象(序列化)
Server->>Server: 反序列化为 ClientAddCommand
Server->>Server: 转换为 ServerAddCommand(需实现转换逻辑)
Server->>Server: 执行 ServerAddCommand.execute()
Server->>Client: 返回执行结果
本实验需要将现有的单用户应用程序转换为客户服务器架构。 主要内容包括:
Эта лаба требует преобразования существующего однопользовательского приложения(лаба 5) в клиент-серверную архитектуру. Основные аспекты включают:
DatagramChannel
в неблокирующем режиме с однопоточным исполнением. 非阻塞模式
java.util.logging
для записи событий (запуск, запросы, сохранение).save
или при завершении, клиент не может отправить эту команду.ServerMain
:主类,负责启动服务器、监听UDP端口。 Основной класс, отвечающий за запуск сервера и прослушивание UDP-портов.CollectionManager
:管理集合(读取/保存文件,Stream API操作)。 Управление коллекциями (чтение/сохранение файлов, операции Stream API).ServerUdpListener
封装NIO非阻塞网络通信逻辑。 Инкапсулирует логику неблокирующего сетевого взаимодействия NIO.command
: 解析命令并执行操作(执行命令逻辑)。 Разбор команд и выполнение операций.ServerLogger
: 日志记录(Java Util Logging) Ведение журналов (Java Util Logging)ClientMain
:主类,读取用户输入并发送命令给服务端。 Основной класс, который считывает пользовательский ввод и отправляет команды в сервер.CommandParser
:将用户输入解析为命令对象。 Разбирает вводимые пользователем данные на объекты команд.ClientUdpSender
:封装UDP通信逻辑(发送/接收数据包)。 Инкапсуляция логики взаимодействия UDP (отправка/получение пакетов).ClientConsole
:控制台交互 Взаимодействие с консольюmodel
:数据模型。(产品对象,制造商等) Модели данных.(объекты продукции, производители и т. д.)util
:工具例如:SerializationUtils
序列化工具