设计并实现一个基于字符界面的C/S结构的文件传输程序java代码

时间: 2023-12-19 07:03:55 浏览: 30
以下是一个简单的基于字符界面的C/S结构的文件传输程序的Java代码,仅供参考: 服务端: ```java import java.io.*; import java.net.*; public class FileServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = null; Socket socket = null; BufferedReader in = null; PrintWriter out = null; InputStream is = null; OutputStream os = null; try { // 创建ServerSocket对象,监听指定端口 serverSocket = new ServerSocket(8888); System.out.println("服务器已启动,等待客户端连接..."); while (true) { // 等待客户端连接 socket = serverSocket.accept(); System.out.println("客户端已连接:" + socket.getInetAddress().getHostAddress()); // 获取输入输出流 in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(socket.getOutputStream(), true); is = socket.getInputStream(); os = socket.getOutputStream(); // 接收文件名和文件大小 String fileName = in.readLine(); long fileSize = Long.parseLong(in.readLine()); System.out.println("接收到文件:" + fileName + ",大小:" + fileSize); // 创建文件 File file = new File("D:\\" + fileName); if (file.exists()) { out.println("文件已存在"); continue; } else { out.println("OK"); } // 接收文件内容并写入文件 FileOutputStream fos = new FileOutputStream(file); byte[] buffer = new byte[1024]; int len; long receivedSize = 0; while (receivedSize < fileSize && (len = is.read(buffer)) != -1) { fos.write(buffer, 0, len); receivedSize += len; } fos.close(); // 发送传输完成消息 out.println("文件传输完成"); // 关闭连接 socket.close(); System.out.println("客户端已断开连接:" + socket.getInetAddress().getHostAddress()); } } catch (IOException e) { e.printStackTrace(); } finally { // 关闭资源 if (is != null) is.close(); if (os != null) os.close(); if (in != null) in.close(); if (out != null) out.close(); if (socket != null) socket.close(); if (serverSocket != null) serverSocket.close(); } } } ``` 客户端: ```java import java.io.*; import java.net.*; public class FileClient { public static void main(String[] args) throws IOException { Socket socket = null; BufferedReader in = null; PrintWriter out = null; InputStream is = null; OutputStream os = null; try { // 创建Socket对象,连接服务端 socket = new Socket("localhost", 8888); System.out.println("连接服务器成功:" + socket.getInetAddress().getHostAddress()); // 获取输入输出流 in = new BufferedReader(new InputStreamReader(socket.getInputStream())); out = new PrintWriter(socket.getOutputStream(), true); is = socket.getInputStream(); os = socket.getOutputStream(); // 读取文件名并发送给服务端 BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); System.out.print("请输入文件名:"); String fileName = reader.readLine(); out.println(fileName); // 判断文件是否存在 String response = in.readLine(); if ("文件已存在".equals(response)) { System.out.println(response); return; } // 读取文件大小并发送给服务端 System.out.print("请输入文件大小(字节):"); long fileSize = Long.parseLong(reader.readLine()); out.println(fileSize); // 读取文件内容并发送给服务端 FileInputStream fis = new FileInputStream(fileName); byte[] buffer = new byte[1024]; int len; long sentSize = 0; while (sentSize < fileSize && (len = fis.read(buffer)) != -1) { os.write(buffer, 0, len); sentSize += len; } fis.close(); // 接收传输完成消息 response = in.readLine(); System.out.println(response); // 关闭连接 socket.close(); System.out.println("已断开与服务器的连接"); } catch (IOException e) { e.printStackTrace(); } finally { // 关闭资源 if (is != null) is.close(); if (os != null) os.close(); if (in != null) in.close(); if (out != null) out.close(); if (socket != null) socket.close(); } } } ``` 注意:以上代码仅为一个简单的示例,还有许多异常情况未处理,需要根据实际情况进行完善。

相关推荐

最新推荐

recommend-type

java网络文件传输(c/s)

文档的功能在于实现文件的传输,是网络开发中的重点,无论是文本,还是图片都可传输……,很小,很实用
recommend-type

基于Java实现文件和base64字符串转换

主要介绍了基于Java实现文件和base64字符串转换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
recommend-type

Java 字符串反转实现代码

主要介绍了 Java 字符串反转实现代码的相关资料,需要的朋友可以参考下
recommend-type

使用java自带des加密算法实现文件加密和字符串加密

主要介绍了使用java自带des加密算法实现文件加密和字符串加密的示例,需要的朋友可以参考下
recommend-type

Java实现字符串匹配(基于正则)

主要介绍了Java中使用正则表达式实现字符串匹配,字符串查找,匹配,替换,正则无不能做,特别是灵活的运用子串匹配,感兴趣的小伙伴们可以参考一下
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB柱状图在信号处理中的应用:可视化信号特征和频谱分析

![matlab画柱状图](https://img-blog.csdnimg.cn/3f32348f1c9c4481a6f5931993732f97.png) # 1. MATLAB柱状图概述** MATLAB柱状图是一种图形化工具,用于可视化数据中不同类别或组的分布情况。它通过绘制垂直条形来表示每个类别或组中的数据值。柱状图在信号处理中广泛用于可视化信号特征和进行频谱分析。 柱状图的优点在于其简单易懂,能够直观地展示数据分布。在信号处理中,柱状图可以帮助工程师识别信号中的模式、趋势和异常情况,从而为信号分析和处理提供有价值的见解。 # 2. 柱状图在信号处理中的应用 柱状图在信号处理
recommend-type

用前端写一个树形控件读取指定目录的文件夹结构

抱歉,作为AI语言模型,我无法提供完整的前端代码。但是,我可以给您一些指导和建议: 1. 使用递归函数来读取指定目录下的所有子文件夹和文件。 2. 在HTML中使用ul和li标签来构建树形结构。 3. 使用CSS样式来美化树形控件。 4. 使用JavaScript来实现树形控件的交互功能(如展开/收起节点)。 5. 使用Ajax或fetch等技术来异步加载子节点,以提高性能。 6. 如果需要支持拖拽等交互功能,可以考虑使用第三方插件或库(如jQuery UI)。 希望这些建议对您有所帮助!
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。