news 2026/5/19 18:58:03

【使用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/5/13 22:59:27

论文降AI率时间不够用?论文降AI率高效率工具整理

现如今&#xff0c;越来越多人开始用AI写论文&#xff0c;据统计&#xff0c;73%以上的大学生都表示曾使用过ai来辅助写论文。然而&#xff0c;各大查重平台也开始严格查AI率&#xff0c;各大高校也有明文规定&#xff0c;AI率超过30%的视为学术不端行为&#xff0c;直接影响学…

作者头像 李华
网站建设 2026/5/13 17:00:55

LaTeX用户福音:用HunyuanOCR提取扫描论文公式文字混合内容

LaTeX用户福音&#xff1a;用HunyuanOCR提取扫描论文公式文字混合内容 在数学、物理和工程领域&#xff0c;研究人员每天都在与复杂的公式打交道。而当这些知识被封存在几十年前的扫描版论文中时&#xff0c;重敲一遍 $\nabla \cdot \mathbf{E} \frac{\rho}{\varepsilon_0}$ …

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

窗口管理神器:用快捷键告别混乱的桌面布局

窗口管理神器&#xff1a;用快捷键告别混乱的桌面布局 【免费下载链接】WindowResizer Save and restore your windows size and position with hotkeys 项目地址: https://gitcode.com/gh_mirrors/win/WindowResizer 每天打开电脑&#xff0c;您是否也面临这样的困扰&a…

作者头像 李华
网站建设 2026/5/19 17:20:24

AI原生应用领域用户体验优化的案例分析

AI原生应用UX优化实战&#xff1a;从“能用”到“好用”的3个经典案例拆解 引言&#xff1a;AI应用的“技术陷阱”——为什么你做的AI功能没人用&#xff1f; 你有没有遇到过这样的AI应用&#xff1f; 打开APP&#xff0c;首页弹个大输入框&#xff1a;“请告诉我你想要什么&am…

作者头像 李华
网站建设 2026/5/19 0:06:40

YimMenu完整配置手册:从源码编译到功能定制的终极指南

YimMenu是一款专为GTA5设计的现代化辅助工具&#xff0c;专注于保护用户免受恶意修改者的侵害。本指南将详细介绍如何从源码编译、配置到定制YimMenu&#xff0c;让你快速掌握这个强大的游戏菜单工具。 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wi…

作者头像 李华
网站建设 2026/5/15 13:59:08

【毕业设计】用于COVID-19检测的轻量级深度学习模型实现

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

作者头像 李华