本地模拟,服务器下载文件
题目要求:
- 编写客户端程序和服务器端程序
- 客户端可以输入一个音乐 文件名,比如 美丽中国,服务端 收到音乐后,可以给客户端返回这个音乐文件,如果服务器没有这个文件,返回一个默认的音乐即可
- 客户端收到文件后,保存到本地E:\\
- 提示:该程序可以使用工具类StreamUtils.java
这是工具类StreamUtils.java:
import java.io.ByteArrayOutputStream;
import java.io.InputStream;/*** 此类用于演示关于流的读写方法**/
public class StreamUtils {/*** 功能:将输入流转换成 byte[]** @param is* @return* @throws Exception*/public static byte[] streamToByteArray(InputStream is) throws Exception {ByteArrayOutputStream bos = new ByteArrayOutputStream();//创建输出流对象byte[] b = new byte[1024];int len;while ((len = is.read(b)) != -1) {bos.write(b, 0, len);}byte[] array = bos.toByteArray();bos.close();return array;}
}
/*** 功能:将 InputStream 转换成 String* @param* @return* @throws Exception*/
import day28.UpLoad.StreamUtils;import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;/*** @author monian* Wo yi wu ta,wei shou shu er!*/
public class DownLoadReceiver {public static void main(String[] args) throws Exception {//提示输入你要下载的文件名System.out.println("请输入需要下载的文件名:");String downFileName ="";Scanner sc = new Scanner(System.in);downFileName = sc.next();//请求到了服务器,准备发送Socket socket = new Socket(InetAddress.getLocalHost(),9999);//获取和Socket关联的输出流OutputStream outputStream = socket.getOutputStream();//现在开始发送需要的文件名outputStream.write(downFileName.getBytes());//设置写入结束的文件标志socket.shutdownOutput();//4.读取服务器返回的文件数据(字节数据)InputStream inputStream = socket.getInputStream();byte[] buf = StreamUtils.streamToByteArray(inputStream);//5.得到一个输入流,准备将bytes 写入到磁盘文件String filePath = "E:\\"+downFileName+".mp3";BufferedOutputStream bos =new BufferedOutputStream(new FileOutputStream(filePath));bos.write(buf);bos.close();//6.关闭相关的资源bos.close();inputStream.close();socket.close();outputStream.close();System.out.println("Client已经关闭~");}
}
import day28.UpLoad.StreamUtils;import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;/*** @author monian* Wo yi wu ta,wei shou shu er!*/
public class DownLoadServer {public static void main(String[] args) throws Exception {ServerSocket serverSocket =new ServerSocket(9999);System.out.println("服务器正在接收~");Socket socket = serverSocket.accept();//3.读取客户端发送要下载的文件名//这里使用while读取文件名,考虑将来客户发送的数据较大的情况InputStream inputStream = socket.getInputStream();byte[] buf = new byte[1024];int len=0;String downloadFileName = "";while ((len = inputStream.read(buf))!=-1){downloadFileName+=new String(buf,0,len);}System.out.println("客户端希望下载的文件名="+downloadFileName);//现在服务器上面有两个文件,无名.mp3 高山流水.mp3//如果客户下载的是高山流水 我们就返回该文件 ,否则一律返回 无名.mp3String resFileName = "";if("高山流水".equals(downloadFileName)){resFileName = "E:\\桌面\\demo\\Java\\com.hanshunping\\src\\day28\\Homework03\\高山流水.mp3";}else{resFileName="E:\\桌面\\demo\\Java\\com.hanshunping\\src\\day28\\Homework03\\musicback.mp3";}//4.创建一个输入流 ,读取文件BufferedInputStream bis = new BufferedInputStream(new FileInputStream(resFileName));//5.使用工具类StreamUtils,读取文件到一个字节数组byte[] bytes = StreamUtils.streamToByteArray(bis);//6.得到Socket关联的输出流BufferedOutputStream bos =new BufferedOutputStream(socket.getOutputStream());//7.写入数据通道,返回给客户端bos.write(bytes);socket.shutdownOutput();//一定要关闭,很关键,关闭输入,否则会一直等待//8.关闭相关的资源bis.close();bos.close();socket.close();serverSocket.close();System.out.println("服务端已经退出~");}
}
相关文章:

本地模拟,服务器下载文件
题目要求: 编写客户端程序和服务器端程序客户端可以输入一个音乐 文件名,比如 美丽中国,服务端 收到音乐后,可以给客户端返回这个音乐文件,如果服务器没有这个文件,返回一个默认的音乐即可客户端收到文件后…...
如何防止Shopee账户关联
在当今数字时代,隐私和安全问题变得日益重要。作为一家受欢迎的在线购物平台,Shopee卖家也面临着多账号关联的风险。本文将如何具保护Shopee免受关联。 一、MuLogin防关联指纹浏览器简介 MuLogin是一款专为隐私保护而设计的指纹浏览器,旨在保…...

Java 入门指南:使用 Docker 创建容器化 Spring Boot 应用程序
文章目录 步骤 1: 准备工作步骤 2: 克隆 Spring Boot 应用程序步骤 3: 创建 Dockerfile步骤 4: 构建 Docker 映像步骤 5: 运行容器步骤 6: 链接到本地数据库步骤 7: 使用 Docker Compose 运行多个容器步骤 8: 设置 CI/CD 管道结论 🎈个人主页:程序员 小侯…...

Leetcode 542. 01 矩阵
542. 01 矩阵-中等 问题描述 给定一个由 0 和 1 组成的矩阵 mat ,请输出一个大小相同的矩阵,其中每一个格子是 mat 中对应位置元素到最近的 0 的距离。 两个相邻元素间的距离为 1 。 示例 1: 输入:mat [[0,0,0],[0,1,0],[0…...

分享一下微信小程序抽奖链接怎么做
标题:微信小程序抽奖链接制作全攻略,轻松玩转营销抽奖活动 一、引言 在当今的数字化时代,抽奖活动已经成为一种高效的市场营销策略,而微信小程序作为一个功能强大的移动端平台,为企业和个人提供了制作抽奖链接的便捷…...

MathType2024破解版激活序列号
MathType序列号是一款针对该软件而制作的激活工具,大家都知道这款软件在官方是需要花钱购买的,不然得话就只能试用。有很多功能都无法正常使用!而本序列号却可以完美的解决这一难题,因为它可以破解并激活“MathType”,…...

简述对 Spring MVC 的理解
SpringMVC 是一种基于 Java 语言开发,实现了 Web MVC 设计模式,请求驱动类型的轻量级 Web 框架。 Spring MVC组件 MVC 架构模式的思想,通过把 Model,View,Controller 分离,将 Web 层进行职责解耦࿰…...

Redis——哨兵模式与Zookeeper选举的异同点
摘要 当我们使用主从复制出现的问题:手动故障转移:写能力和存储能力受限:主从复制 -master 宕机故障处理。 主从切换技术的方法是:当主服务器宕机后,需要手动把一台从服务器切换为主服务器,这就需要人工干…...

基于 Center 的 3D 目标检测和跟踪
论文地址:https://arxiv.org/abs/2006.11275 论文代码:https://github.com/tianweiy/CenterPoint 3D 目标通常表示为点云中的 3D Boxes。 CenterPoint 在第一阶段,使用关键点检测器检测对象的中心,然后回归到其他属性࿰…...

华锐技术何志东:证券核心交易系统分布式改造将迎来规模化落地阶段
近年来,数字化转型成为证券业发展的下一战略高地,根据 2021 年证券业协会专项调查结果显示,71% 的券商将数字化转型列为公司战略任务。 在落地数字化转型战略过程中,证券业核心交易系统面临着不少挑战。构建新一代分布式核心交易…...
数据结构 -- ArrayList与LinkedList的区别
一、二者的相同点 1,它们都是继承自List接口。 二、二者的区别 1,数据结构:ArrayList是(Array动态数组)的数据结构;而LinkedList是(Link双向链表)的数据结构。ArrayList 自由性较…...
豪车托运为什么选小板
小板运输是一种适用于豪车客户的高效运输方式。它提供了快速、安全、便捷的服务,并且相对经济实惠。以下是关于小板运输的时效和价格的介绍: 时效:小板运输通常能够在短时间内完成车辆的运输。具体时效取决于起点和目的地之间的距离ÿ…...
【base64加密】js/ts的基础加密
base64的字符串简单加密,主用于网页缓存数据的加密。 适用于常规html、小游戏(egret、cocos、laya)等 原文参考:JS基于base64编码加密解密文本和图片(修订)_js base64加密-CSDN博客 测试:JS实…...

基于python的app程式开发
安装的库文件: 运行代码: # -*- coding:utf-8 -*- from kivy.app import App class HelloApp(App):pass if __name__ __main__:HelloApp().run() 结果画面:...
Spring Event学习
Spring Event学习 观察者模式是一种行为设计模式,它定义了对象之间的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并被自动更新。在这个模式中,改变状态的对象被称为主题,依赖的对象被称为观…...

UE4 HLSL学习笔记
在Custom配置对应ush文件路径 在HLSL中写入对应代码 Custom里面增加两个Input,名字必须和ush文件内的未知变量名字一样 然后就对应输出对应效果的颜色 这就是简单的加法运算 减法同理: 乘法除法同理 HLSL取最小值 HLSL取最大值 绝对值: 取余…...

报文的路由过程
路由转发过程 记住路由转发过程结论:报文ip是不变,mac改变。 mac地址在同一个广播域传输过程中是不变的;在跨越广播域的时候会发生改变的;而IP地址在传输过程中是不会改变的(除NAT的时候)。 ip地址本质上是…...

【CPP】类和对象
1- Classes and Objects Structures A struct in C is a type consisting of a sequence of data membersSome functions/Statements are needed to operate the data members of an object of a struct type 不不小心操作错误,不小心越界 Classes You should b…...

【多线程面试题二十】、 如何实现互斥锁(mutex)?
文章底部有个人公众号:热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享? 踩过的坑没必要让别人在再踩,自己复盘也能加深记忆。利己利人、所谓双赢。 面试官:如何实现互斥锁…...

hypercube背景设置为白色,绘制高光谱3D立方体
import scipy pip install wxpython PyOpenGL和Spectral需要本地安装 可参考链接https://blog.csdn.net/qq_43204333/article/details/119837870 参考:https://blog.csdn.net/Tiandailan/article/details/132719745?spm1001.2014.3001.5506Mouse Functions:left-cl…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

如何将联系人从 iPhone 转移到 Android
从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
C# SqlSugar:依赖注入与仓储模式实践
C# SqlSugar:依赖注入与仓储模式实践 在 C# 的应用开发中,数据库操作是必不可少的环节。为了让数据访问层更加简洁、高效且易于维护,许多开发者会选择成熟的 ORM(对象关系映射)框架,SqlSugar 就是其中备受…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
JS手写代码篇----使用Promise封装AJAX请求
15、使用Promise封装AJAX请求 promise就有reject和resolve了,就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

uniapp 小程序 学习(一)
利用Hbuilder 创建项目 运行到内置浏览器看效果 下载微信小程序 安装到Hbuilder 下载地址 :开发者工具默认安装 设置服务端口号 在Hbuilder中设置微信小程序 配置 找到运行设置,将微信开发者工具放入到Hbuilder中, 打开后出现 如下 bug 解…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...