TCP通信练习4-上传文件名重复问题

UUID可以生成一个随机的字符串,而且字符串的内容是唯一的。那么我们可以就用这个类去生成一个随机的文件名字。利用下面的静态方法,该方法会给你返回一个UUID的对象。

java 复制代码
package com.lkbhua.TcpAppDemp.Test.test4;

import java.util.UUID;

public class UUIDTest {
    public static void main(String[] args) {
        // UUID演示用法
        UUID uuid = UUID.randomUUID();
        System.out.println(uuid);
        // 每一次生成的都不一样
        //  8f8cbe94-1761-4466-8acb-deae01a57c02
        // 不想要里面的"-"怎么办??
        // 把横杠替换成长度为0的字符串
        String str = uuid.toString().replace("-", "");
        System.out.println(str);
        // 908a086c8c5643a3b9f18d2828be05dd
    }
}
java 复制代码
package com.lkbhua.TcpAppDemp.Test.test4;


import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.UUID;

public class server {
    public static void main(String[] args) throws IOException {
        // TCP综合练习3------上传文件
        // 客服端: 将本地文件上传到服务器,接受服务器的反馈
        // 服务端: 接受文件并保存,返回上传成功

        // 1、创建ServerSocket对象并且绑定端口号
        ServerSocket ss = new ServerSocket(10000);
        UUID uuid = UUID.randomUUID();
        System.out.println("服务器启动了...");
        // 2、等待客户端连接
        Socket socket = ss.accept();
        System.out.println("一个客户端连接了...");
        // 3、读取数据,并保存到本地文件中
        BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
        String name = uuid.toString().replace("-", "");
        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("lkb06-SocketNetCode\\aaa\\" + name));
        int len;
        byte[] bytes = new byte[1024];
        while ((len = bis.read(bytes)) != -1) {
            bos.write(bytes,0,len);
        }
        System.out.println("保存完毕...");
        // 4、回写数据
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
        bw.write("上传成功");
        bw.newLine();
        bw.flush();
        // 5、关闭资源
        socket.close();
        ss.close();
    }
}
java 复制代码
package com.lkbhua.TcpAppDemp.Test.test4;

import java.io.*;
import java.net.Socket;

public class client {
    public static void main(String[] args) throws IOException {
        // TCP综合练习3------上传文件
        // 客服端: 将本地文件上传到服务器,接受服务器的反馈
        // 服务端: 接受文件并保存,返回上传成功

        // 1、创建socket对象,并且连接服务器
        Socket socket = new Socket("127.0.0.1",10000);
        // 2、读取本地文件中的数据,并写到服务器当中
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("lkb06-SocketNetCode\\b.txt"));
        BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
        byte[] bytes = new byte[1024];
        int len;
        while ((len = bis.read(bytes)) != -1) {
            bos.write(bytes,0,len);
        }
        // 写出结束标记
        socket.shutdownOutput();
        // 3、接受服务器的回写数据
        BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line = br.readLine();
        System.out.println(line);
        // 4、关闭流资源
        socket.close();
    }
}
相关推荐
molaifeng1 小时前
Go 语言如何实现高性能网络 I/O:Netpoller 模型揭秘
开发语言·网络·golang
韩师学子--小倪1 小时前
fastjson与gson的toString差异
java·json
Drawing stars1 小时前
JAVA后端 前端 大模型应用 学习路线
java·前端·学习
nbsaas-boot1 小时前
SQL Server 存储过程开发规范(公司内部模板)
java·服务器·数据库
行百里er2 小时前
用 ThreadLocal + Deque 打造一个“线程专属的调用栈” —— Spring Insight 的上下文管理术
java·后端·架构
玄〤2 小时前
黑马点评中 VoucherOrderServiceImpl 实现类中的一人一单实现解析(单机部署)
java·数据库·redis·笔记·后端·mybatis·springboot
J_liaty2 小时前
Spring Boot拦截器与过滤器深度解析
java·spring boot·后端·interceptor·filter
知乎的哥廷根数学学派2 小时前
基于多模态特征融合和可解释性深度学习的工业压缩机异常分类与预测性维护智能诊断(Python)
网络·人工智能·pytorch·python·深度学习·机器学习·分类
网络工程师_ling2 小时前
【 Elastiflow (ELK) 网络流量分析系统 部署教程】
网络·elk
亲爱的非洲野猪3 小时前
Java锁机制八股文
java·开发语言