4.28总结

 对部分代码进行了修改,将一些代码封装成方法,实现了头像功能,创建一个本地字节输入流 fileinputSteam 对象,构造方法中绑定读取的数据源,创建一个socket对象,构造方法中绑定服务器的IP地址和端口号使用socket中的方法 getoutputstream 获取网络字节输出流,使用本地字节输入流中的read方法,读取本地文件和网络输出流write方法,把读取到的文件上传到服务器

服务端:

package server;

import utils.SQLUtils;
import java.io.*;
import java.net.Socket;
import java.net.URI;
import java.net.URISyntaxException;
import java.sql.SQLException;


class TcpServer {
    public static Socket socket;
    public static void upLoad(String user) throws IOException, URISyntaxException, SQLException {

        //1、创建一个服务器的serversocket 对象
        //ServerSocket server = new ServerSocket(6666);

        //2、等待客户端连接
        socket = Server.server.accept();
        //3、获取输入流
        InputStream is = socket.getInputStream();
        String fileName = "avatar_" + user + ".png"; // 生成唯一文件名
        String uploadDir = "file:/E:/pro/SERVER/avatar/"; // 指定存储用户头像文件的目录*/
        URI uri = new URI(uploadDir + fileName);

        File fl = new File(uri);

        FileOutputStream fos = new FileOutputStream(fl);

        int len = 0;
        byte[] bytes = new byte[1024];
        while((len = is.read(bytes)) != -1){
            fos.write(bytes, 0, len);
        }
        SQLUtils.Change("avatar", user, String.valueOf(fl));
        socket.getOutputStream().write("图片上传成功".getBytes());

        fos.close();
        socket.close();
    }

}

客户端:

//1、创建一个本地字节输入流 fileinputSteam 对象,构造方法中绑定读取的数据源
            FileInputStream fis = new FileInputStream(file);
            //2、创建一个socket对象,构造方法中绑定服务器的IP地址和端口号
            Socket socket = new Socket("127.0.0.1",6666);
            //3、使用socket中的方法 getoutputstream 获取网络字节输出流
            OutputStream os = socket.getOutputStream();

            int len = 0;
            byte[] bytes = new byte[1002];
            //4、使用本地字节输入流中的read方法,读取本地文件
            //5、使用网络输出流write方法,把读取到的文件上传到服务器
            while ((len = fis.read(bytes)) != -1) {
                os.write(bytes,0,len);
            }

            //告诉服务器,文件已经发送完毕
            socket.shutdownOutput();
            //获取网络输入流
            InputStream is = socket.getInputStream();
            //7、通过网络输入流对象中的read方法,读取回写数据
            while ((len = is.read(bytes)) != -1){
                System.out.println(new String(bytes,0,len));
            }
            //释放资源
            fis.close();
            socket.close();

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/581260.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kafka(十二)Streams

目录 Streams1 什么式是流式处理2 流式处理的相关概念2.1 拓扑2.2 时间2.2.1 输入时间2.2.2 输出时间 2.3 状态2.4 流和表2.5 时间窗口2.5.1 测试时间窗口 2.6 处理保证 3 流式处理设计模式3.1 单事件处理3.2 使用本地状态3.3 多阶段处理和重分区3.4 使用外部查找:流…

阿里云操作日记

昨天买了一个超级便宜的阿里云服务器,2核2G,3M固定带宽,40G ESSD Entry云盘,搭载一个简单的系统,就想到了docker轻量级,易于管理 其实docker很好用,第一步就是安装docker 一、docker安装与端口…

Python快速入门1数据类型(需要具有编程基础)

数据类型: Python 3.0版本中常见的数据类型有六种: 不可变数据类型可变数据类型Number(数字)List(列表)String(字符串)Dictionary(字典)Tuple(元…

python学习笔记----循环语句(四)

一、while循环 为什么学习循环语句 循环在程序中同判断一样,也是广泛存在的,是非常多功能实现的基础: 1.1 while循环语法 while 条件表达式:# 循环体# 执行代码这里,“条件表达式”是每次循环开始前都会评估的表达式。如果条件…

张大哥笔记:我付钱了,我就是大爷?

很抱歉用这个当做标题,来给大家分享一些电商的故事!大家好,我是张大哥,今天聊聊在电商路上遇到过的奇葩买家? 比如最近我在做PDD的时候,就会遇到很多莫名其妙的sha子,咱是知识份子,肯…

漏洞扫扫工具合集

综合类扫描工具 AWVS Acunetix一款商业的Web漏洞扫描程序,它可以检查Web应用程序中的漏洞,如SQL注入、跨站脚本攻击、身份验证页上的弱口令长度等。它拥有一个操作方便的图形用户界面,并且能够创建专业级的Web站点安全审核报告。新版本集成了…

LeetCode1017题:负二进制转换(原创)

【题目描述】 给你一个整数 n ,以二进制字符串的形式返回该整数的 负二进制(base -2)表示。注意,除非字符串就是 "0",否则返回的字符串中不能含有前导零。 示例 1: 输入:n 2 输出&…

高频面试题:解决Spring框架中的循环依赖问题

引言:什么是Spring框架与循环依赖? 在Spring框架中,循环依赖是指两个或多个bean相互依赖对方以完成自己的初始化。这种依赖关系形成了一个闭环,导致无法顺利完成依赖注入。比如,如果Bean A在其构造函数中需要Bean B&a…

图像处理:乘法滤波器(Multiplying Filter)和逆FFT位移

一、乘法滤波器(Multiplying Filter) 乘法滤波器是一种以像素值为权重的滤波器,它通过将滤波器的权重与图像的像素值相乘,来获得滤波后的像素值。具体地,假设乘法滤波器的权重为h(i,j),图像的像素值为f(m,…

基于51单片机的电子秤LCD1602液晶显示( proteus仿真+程序+设计报告+讲解视频)

基于51单片机电子秤LCD显示 1. 主要功能:2. 讲解视频:3. 仿真设计4. 程序代码5. 设计报告6. 设计资料内容清单&&下载链接 基于51单片机电子秤LCD显示( proteus仿真程序设计报告讲解视频) 仿真图proteus8.9及以上 程序编译器&#xf…

NiceGUI:一个超赞的Python UI库

1. 引言 NiceGUI是一个基于Python的简单用户界面框架,可与浏览器或桌面应用程序流畅运行。无论你是制作小型网络应用程序、还是玩机器人项目,NiceGUI 都能以其简单的界面和众多的功能满足你的需求。这篇文章的目的是通过向大家展示如何构建和部署NiceGU…

如何选择适合自己需求的DC电源模块?

BOSHIDA 如何选择适合自己需求的DC电源模块? 在选择适合自己需求的DC电源模块时,需要考虑一些关键因素,以确保选择的模块能够满足电源要求并具有良好的性能。下面是一些值得考虑的因素: 1. 电压输出范围:首先&#xf…

短视频素材从哪里获取?推荐8个短视频素材高清网站

在这个视觉内容至关重要的数字化时代,高质量的视频素材是任何成功视频项目的核心。无论是加强品牌宣传、提升社交媒体互动还是制作引人注目的广告,这些精选的全球视频素材网站都将为你的创意注入活力,帮助你在激烈的市场竞争中脱颖而出。 1.…

2024LarkXR新增功能系列之六 | ⽀持8K分辨率

Paraverse平行云企业级实时云渲染解决方案LarkXR是平行云自主研发的CloudXR解决方案,在业界实现了创新突破。通过分钟级部署大规模云端资源、高度适配XR所有主流引擎、以及灵活支持不同交互和沉浸方式的内容形式,LarkXR解决了Cloud XR商业化过程中所面临…

Linux之进程间通信(二)

system V system V共享内存是内核中专门设计的通信的方式, 粗粒度划分操作系统分为进程管理, 内存管理, 文件系统, 驱动管理.., 粒度更细地分还有 进程间通信模块. 对于操作系统, 通信的场景有很多, 有以传送数据, 快速传送数据, 传送特定数据块, 进程间协同与控制以目的, 它…

SystemUI GlobalActions plugin解析

com.android.systemui.action.PLUGIN_GLOBAL_ACTIONS 系统的默认实现为GlobalActionsImpl: 是谁发送了showShutdownUi指令? GlobalActionsImpl 是通过inject的方式创建的 GlobalActionsComponent是一个system UI services,配置在config.xml中&#xff…

Docker容器:网络模式与资源控制

目录 一、Docker 网络模式 1、Docker 网络实现原理 2、Docker 网络模式概述 2.1 Host 模式 2.2 Container 模式 2.3 None 模式 2.4 Bridge 模式 2.5 自定义网络(user-defined network) 3、配置 docker 网络模式 3.1 查看网络基础命令 3.1.1 查…

“怡宝”冲刺港股,饮用水基本盘稳如磐石

最近,饮用水市场异常热闹。 先是“怡宝”所属的华润饮料正式向港交所提交上市申请。随即,多名农夫山泉员工在朋友圈发文“推出绿瓶纯净水”,撞脸怡宝经典包装。“怡宝”遭遇奇袭的背后,是双方持续“交锋”的多年,随着…

Vue从入门到精通-01-Vue的介绍和vue-cli

MVVM模式 Model:负责数据存储 View:负责页面展示 View Model:负责业务逻辑处理(比如Ajax请求等),对数据进行加工后交给视图展示 关于框架 为什么要学习流行框架 1、企业为了提高开发效率:…

【Harmony3.1/4.0】笔记三-计算器

概念 网格布局是由“行”和“列”分割的单元格所组成,通过指定“项目”所在的单元格做出各种各样的布局。网格布局具有较强的页面均分能力,子组件占比控制能力,是一种重要自适应布局,其使用场景有九宫格图片展示、日历、计算器等…