Сетевое взаимодействие - клиент-серверная архитектура, основные протоколы, их сходства и отличия. 网络交互——客户端-服务器架构、基本协议、它们的相同点和不同点。
это модель взаимодействия, при которой задачи распределяются между поставщиками ресурсов или услуг (серверами) и потребителями (клиентами). Эта модель широко используется в компьютерных сетях и позволяет эффективно управлять ресурсами и обеспечивать доступ к данным и приложениям.
是一种交互模型,其中任务在资源或服务提供者(服务器)和消费者(客户端)之间分配。 这种模式被广泛应用于计算机网络,可实现高效的资源管理以及数据和应用程序的访问。
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, forEachfilter, 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 序列化工具