news 2026/6/9 18:47:41

【使用java创建TCP连接,让服务端读取200MB的本地文件并发送给客户端,客户端接收文件并保存到本地】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【使用java创建TCP连接,让服务端读取200MB的本地文件并发送给客户端,客户端接收文件并保存到本地】

TCP连接发送文件

服务端为java,客户端也为java。(实际场景中客户端和服务端可以为C++)。
使用TCP连接发送文件需要注意:
规定好双方的协议,即发送端要怎么发送,接收端要怎么接收


一、java服务端

publicclassTCPServer{privatestaticfinalintPORT=8081;privatestaticfinalStringFILE_PATH="C:\\Users\\Wasond\\Desktop\\11.zip";// 待发送的 100MB 文件privatestaticfinallongCHUNK_SIZE=1024*1024;// 1MB 分块publicstaticvoidmain(String[]args){// SpringApplication.run(FileServerApplication.class, args);newThread(()->{try(ServerSocketserverSocket=newServerSocket(PORT)){System.out.println("Server started on port "+PORT);while(true){SocketclientSocket=serverSocket.accept();newThread(()->sendFile(clientSocket)).start();}}catch(IOExceptione){e.printStackTrace();}}).start();}privatestaticvoidsendFile(SocketclientSocket){try(java.io.FileInputStreamfileInputStream=newjava.io.FileInputStream(FILE_PATH);DataOutputStreamout=newDataOutputStream(clientSocket.getOutputStream())){longfileSize=newjava.io.File(FILE_PATH).length();out.writeLong(fileSize);// 先发送文件大小(客户端用于进度计算)byte[]buffer=newbyte[(int)CHUNK_SIZE];intbytesRead;longtransferred=0;while(transferred<fileSize){intchunkSize=(int)Math.min(CHUNK_SIZE,fileSize-transferred);bytesRead=fileInputStream.read(buffer,0,chunkSize);if(bytesRead==-1)break;// 文件读取完毕// 发送分块数据out.writeInt(bytesRead);// 发送当前块实际大小out.write(buffer,0,bytesRead);transferred+=bytesRead;}System.out.println("File sent successfully. Total bytes: "+transferred);}catch(IOExceptione){e.printStackTrace();}finally{try{clientSocket.close();}catch(IOExceptione){e.printStackTrace();}}}}

二、java客户端

importjava.io.*;importjava.net.Socket;publicclassTCPClient{privatestaticfinalStringSERVER_HOST="localhost";privatestaticfinalintSERVER_PORT=8081;privatestaticfinalStringOUTPUT_FILE="C:\\Users\\Wasond\\Desktop\\777.zip";publicstaticvoidmain(String[]args){try(Socketsocket=newSocket(SERVER_HOST,SERVER_PORT);DataInputStreamin=newDataInputStream(socket.getInputStream());FileOutputStreamfos=newFileOutputStream(OUTPUT_FILE)){// 1. 读取文件总大小longfileSize=in.readLong();System.out.println("Receiving file (size: "+fileSize+" bytes)");// 2. 分块接收并写入本地文件longreceived=0;while(received<fileSize){intchunkSize=in.readInt();// 读取当前块大小byte[]buffer=newbyte[chunkSize];// in.readFully(buffer); // 确保读取完整块// 替换 in.readFully(buffer) 为更安全的读取方式intbytesRead=0;while(bytesRead<chunkSize){intresult=in.read(buffer,bytesRead,chunkSize-bytesRead);if(result==-1){thrownewIOException("Unexpected end of stream");}bytesRead+=result;}fos.write(buffer);received+=chunkSize;// 打印进度(可选)System.out.printf("Progress: %.2f%%\n",(received*100.0/fileSize));}System.out.println("File received and saved to "+OUTPUT_FILE);}catch(IOExceptione){e.printStackTrace();}}}

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 18:40:55

Umi-OCR离线部署全攻略:从环境配置到性能优化的7大实战方案

Umi-OCR离线部署全攻略&#xff1a;从环境配置到性能优化的7大实战方案 【免费下载链接】Umi-OCR Umi-OCR: 这是一个免费、开源、可批量处理的离线OCR软件&#xff0c;适用于Windows系统&#xff0c;支持截图OCR、批量OCR、二维码识别等功能。 项目地址: https://gitcode.com…

作者头像 李华
网站建设 2026/6/9 18:33:33

dnSpyEx调试器实战指南:10个高效.NET程序逆向分析技巧

dnSpyEx调试器实战指南&#xff1a;10个高效.NET程序逆向分析技巧 【免费下载链接】dnSpy 项目地址: https://gitcode.com/gh_mirrors/dns/dnSpy 还在为复杂的.NET程序调试而头疼吗&#xff1f;面对无源码的第三方程序集是否感到束手无策&#xff1f;dnSpyEx作为专业的…

作者头像 李华
网站建设 2026/6/5 10:08:51

AI伦理讨论焦点:lora-scripts让深度伪造技术平民化了吗?

AI伦理讨论焦点&#xff1a;LoRA-Scripts让深度伪造技术平民化了吗&#xff1f; 在某社交媒体平台上&#xff0c;一段视频悄然走红&#xff1a;一位公众人物“亲口”发表了一段从未公开过的言论。画面流畅、表情自然、语调真实——直到有人指出&#xff0c;这人根本没说过这话。…

作者头像 李华
网站建设 2026/6/5 9:48:05

PyCharm版本控制系统集成Git管理HunyuanOCR项目代码

PyCharm 与 Git 深度集成&#xff1a;高效管理 HunyuanOCR 项目代码的实战之道 在 AI 应用开发日益复杂的今天&#xff0c;一个典型的 OCR 项目不再只是跑通几个推理脚本那么简单。以腾讯混元OCR&#xff08;HunyuanOCR&#xff09;为例&#xff0c;从模型加载、接口封装到 We…

作者头像 李华
网站建设 2026/6/9 18:40:32

HunyuanOCR GitHub仓库星标破万:开发者社区活跃度分析

HunyuanOCR GitHub星标破万&#xff1a;一场轻量化端到端OCR的工程实践革命 在智能文档处理领域&#xff0c;我们正经历一场静默却深刻的变革。过去几年里&#xff0c;开发者面对OCR任务时&#xff0c;几乎默认要搭建一套复杂的级联流水线&#xff1a;先用检测模型框出文字区域…

作者头像 李华
网站建设 2026/6/9 18:38:24

OBS StreamFX终极教程:5步打造电影级直播画面

OBS StreamFX终极教程&#xff1a;5步打造电影级直播画面 【免费下载链接】obs-StreamFX StreamFX is a plugin for OBS Studio which adds many new effects, filters, sources, transitions and encoders! Be it 3D Transform, Blur, complex Masking, or even custom shader…

作者头像 李华