news 2026/4/23 14:47:46

TCP通信练习5-上传文件(多线程)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
TCP通信练习5-上传文件(多线程)

多线程内的代码:

package com.lkbhua.TcpAppDemp.Test.test5; import java.io.*; import java.net.Socket; import java.util.UUID; public class MyRunnable implements Runnable { Socket socket; UUID uuid = UUID.randomUUID(); public MyRunnable(Socket socket) { this.socket = socket; } @Override public void run() { try { 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、关闭资源 } catch (IOException e) { e.printStackTrace(); } finally { if(socket != null){ try { socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
package com.lkbhua.TcpAppDemp.Test.test5; 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("服务器启动了..."); while(true){ // 2、等待客户端连接 Socket socket = ss.accept(); // 开启一条线程 // 一个用户就对应服务端的一条线程 new Thread(new MyRunnable( socket)).start(); } } }
package com.lkbhua.TcpAppDemp.Test.test5; 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(); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/21 11:22:00

Java计算机毕设之基于SpringBoot的二手车交易平台设计与实现基于springboot+vue技术的二手车交易管理系统的设计与实现(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华
网站建设 2026/4/17 16:06:31

PCIe-QW对齐

QW对齐 1. 基本定义 DW(Double Word):双字 = 4字节(32位) QW(Quad Word):四字 = 8字节(64位)= 2个DW QW对齐:地址必须是8字节的整数倍 2. 地址对齐的判断 在二进制层面: DW对齐:地址低2位为 00b(4字节边界) QW对齐:地址低3位为 000b(8字节边界) // 地…

作者头像 李华
网站建设 2026/4/19 6:15:52

12.24 - 螺旋矩阵 指针和引用的区别

目录 1.螺旋矩阵 a.核心思想 b.思路 c.步骤 2.指针和引用的区别 1.螺旋矩阵 54. 螺旋矩阵 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/spiral-matrix/ class Solution { public:vector<int> spiralOrder(vector<vector<int>&g…

作者头像 李华
网站建设 2026/4/23 11:28:17

HR 年终总结 PPT 工具测评:哪款最适合人事岗位?

又是一年年末&#xff0c;HR 们的噩梦时刻来临了&#xff01;堆积如山的年终总结报告&#xff0c;从员工绩效分析、招聘成果展示到培训效果评估&#xff0c;每一项都得精心整理成 PPT。可现实却是&#xff0c;熬夜加班改报告成了常态&#xff0c;内容框架混乱得像一团乱麻&…

作者头像 李华
网站建设 2026/4/23 11:26:48

《深度学习》CUDA安装配置、pytorch库、torchvision库、torchaudio库安装

一、下载CUDA 1.什么是CUDA CUDA&#xff08;Compute Unified Device Architecture&#xff09;是由NVIDIA推出的并行计算平台和编程模型&#xff0c;允许开发者利用NVIDIA GPU的并行计算能力加速计算密集型任务。它通过扩展C/C等语言&#xff0c;提供直接访问GPU虚拟指令集和…

作者头像 李华
网站建设 2026/4/23 11:32:49

国产AI播客:告别费眼阅读,开启“听识”时代

在企业日常运营中&#xff0c;我们积累了大量高价值的私域文档——产品白皮书、内部培训资料、项目复盘报告、市场分析、标准操作流程……这些文档是组织的核心知识资产&#xff0c;但传统的阅读与传播方式却让它们大多沉睡在硬盘或云端&#xff0c;难以被高效利用和吸收。私域…

作者头像 李华