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();
    }
}
相关推荐
Ether IC Verifier2 小时前
TCP三次握手与四次挥手详解
网络·网络协议·tcp/ip·计算机网络
二哈赛车手8 小时前
新人笔记---ApiFox的一些常见使用出错
java·笔记·spring
栗子~~9 小时前
JAVA - 二层缓存设计(本地缓冲+redis缓冲+广播所有本地缓冲失效) demo
java·redis·缓存
星寂樱易李9 小时前
iperf3 + Python-- 网络带宽、网速、网络稳定性
开发语言·网络·python
YDS8299 小时前
DeepSeek RAG&MCP + Agent智能体项目 —— RAG知识库的搭建和接口实现
java·ai·springboot·agent·rag·deepseek
pengyi8710159 小时前
独享IP池自动化维护方案,智能检测自动延长使用寿命
网络协议·tcp/ip·自动化
未若君雅裁10 小时前
MyBatis 一级缓存、二级缓存与清理机制
java·缓存·mybatis
AI人工智能+电脑小能手10 小时前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm
阿维的博客日记11 小时前
Nacos 为什么能让配置动态生效?(涉及 @RefreshScope 注解)
java·spring
雨辰AI11 小时前
SpringBoot3 + 人大金仓读写分离 + 分库分表 + 集群高可用 全栈实战
java·数据库·mysql·政务