Java 基于TCP Socket 实现文件上传

 更新时间:2020年12月11日 11:18:02   作者:weiQLog  
这篇文章主要介绍了Java 基于TCP Socket 实现文件上传的示例代码,帮助大家更好的理解和使用Java,感兴趣的朋友可以了解下

文件上传过程一个单向Socket通信过程。客户端通过文件输入流读取文件,然后从Socket获取输出流写入数据。服务端从Socket中获得输入流,然后写入文件输出流,写入数据完成则上传完成。

服务端UploadServer:

public class UplaodServer {
  public static void main(String []args){
    try(
      // 创建一个ServerSocket监听8080端口的请求
      // ServerSocket 实现了 AutoCloseable接口, 可以自动释放资源
    	ServerSocket server = new ServerSocket(8080);
      // accept()会阻塞当前线程, 等待客户端请求 
      Socket socket = server.accept();
      // 获取输入流
      BufferedInputStream in = new BufferedInputStream(socket.getInputStream());
      // 由文件输出流创建缓冲输出流, 写入本地upload.jpg 文件
      FileOutputStream outputStream = new FileOutputStream("./upload.jpg")
    ){
      // 缓冲区 
      byte [] buffer = new byte[1024];
      int len = in.read(buffer);
      while(len != -1){
        // 写入数据到文件
        outputStream.write(buffer, 0, len);
        // 再次从Socket中读取数据
        len = in.read(buffer);
      }
      System.out.println("文件已上传");
    }catch (IOException e) {
      e.printStackTrace();
    }
  }
}

客户端UploadClient:

public class UploadClient {
  public static void main(String []args){
    try(
    	// Socket 实现了 AutoCloseable接口 可自动关闭资源
      Socket socket = new Socket("127.0.0.1", 8080);
       // 又Socket获得输出流, 并创建缓冲输出流
      BufferedOutputStream out = new BufferedOutputStream(socket.getOutputStream());
      FileInputStream fileInput = new FileInputStream("F:\file\oxx6j5.jpg");
      // 由文件输入流创建缓冲输入流
      BufferedInputStream in = new BufferedInputStream(fileInputStream);
    ){
       // 准备缓冲区
      byte[] buffer = new byte[1024];
      int len = in.read(buffer);
      while (len != -1) {
        // 写入Socket
        out.write(buffer, 0, len);
        // 再次读取文件
        len = in.read(buffer);
      }
      System.out.println("上传成功!");
    }catch (ConnectException e) {
      System.out.println("服务器未启动");
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}

注意

server.accept()会阻塞线程,所以最好把server.accept()语句放入子线程中。

以上就是Java 基于TCP Socket 实现文件上传的详细内容,更多关于Java 文件上传的资料请关注脚本之家其它相关文章!

相关文章

  • java使用正则表达式判断手机号的方法示例

    java使用正则表达式判断手机号的方法示例

    这篇文章主要介绍了java使用正则表达式判断手机号的方法,分析了手机号码段的原理及java使用正则表达式针对手机号的匹配操作实现技巧,需要的朋友可以参考下
    2017-06-06
  • 详解如何在项目中应用SpringSecurity权限控制

    详解如何在项目中应用SpringSecurity权限控制

    本文主要介绍了如何在项目中应用SpringSecurity权限控制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • 新手学习微服务SpringCloud项目架构搭建方法

    新手学习微服务SpringCloud项目架构搭建方法

    这篇文章主要介绍了新手学习微服务SpringCloud项目架构搭建方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Intellij IDEA如何自定义注释模板的实现方法

    Intellij IDEA如何自定义注释模板的实现方法

    这篇文章主要介绍了Intellij IDEA如何自定义注释模板的实现方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-05-05
  • Spring Bean生命周期之属性赋值阶段详解

    Spring Bean生命周期之属性赋值阶段详解

    这篇文章主要为大家详细介绍了Spring Bean生命周期之属性赋值阶段,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-03-03
  • Java实现按比例缩小图片

    Java实现按比例缩小图片

    这篇文章主要为大家详细介绍了Java实现按比例缩小图片,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-04-04
  • Spring 中使用反射创建 Bean 实例的几种方式

    Spring 中使用反射创建 Bean 实例的几种方式

    文章介绍了在Spring框架中如何使用反射来创建Bean实例,包括使用Class.newInstance()、Constructor.newInstance()、工厂方法以及Spring的BeanUtils工具类,文章还强调了反射操作的注意事项,如异常处理、性能、安全性以及类型安全,感兴趣的朋友一起看看吧
    2025-03-03
  • Spring Boot中进行 文件上传和 文件下载功能实现

    Spring Boot中进行 文件上传和 文件下载功能实现

    开发Wb应用时,文件上传是很常见的一个需求,浏览器 通过 表单形式 将 文件 以 流的形式传递 给 服务器,服务器再对上传的数据解析处理,下面将通过一个案例讲解使用 SpringBoot 实现 文件上传,感兴趣的朋友一起看看吧
    2024-07-07
  • java反射耗时测试案例解析

    java反射耗时测试案例解析

    这篇文章主要介绍了java反射耗时测试案例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Spring 处理 HTTP 请求参数注解的操作方法

    Spring 处理 HTTP 请求参数注解的操作方法

    这篇文章主要介绍了Spring 处理 HTTP 请求参数注解的操作方法,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友参考下吧
    2024-04-04

最新评论