美文网首页
Java入门--socket文件上传

Java入门--socket文件上传

作者: 王二麻子88 | 来源:发表于2020-12-02 23:36 被阅读0次

    Java入门--Socket文件上传

    一. socket客户端

    package io.github.wangermaizi.day10;
    
    // 基于TCP的文件上传
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    
    public class TCPUploadClient {
        public static void main(String[] args) throws IOException {
            // 1. 获取本地文件资源
            FileInputStream fis = new FileInputStream("C:\\Users\\LSY\\Desktop\\sys_path.txt");
    
            // 2. 创建 socket 客户端
            Socket socketClient = new Socket("127.0.0.1", 8888);
    
            // 3. 向socket 输出本地资源
            OutputStream ops = socketClient.getOutputStream();
            int len = 0;
            byte[] bytes = new byte[1024];
            // fis.read(bytes) 读取本地字节资源, 直到读取到 -1 结束, 但是程序并不会读取到-1
            // 此时, 程序读取不到结束标记就是进入阻塞状态, 等待结束标记, 后续代码均不会执行
            while ((len = fis.read(bytes)) != -1 ) {
                // 循环读取本地资源, 并往socket输出流
                ops.write(bytes,0, len);
            }
            /*
             * 解决方案:
             *  使用 socket对象的 shutdownOutput() 停止输出流
             * */
            socketClient.shutdownOutput();
            // 读取结束之后要即时关闭文件资源
            fis.close();
            // 等待保存数据成功之后的响应内容 (也是流字节的形式)
            InputStream ips = socketClient.getInputStream();
            while ((len = ips.read(bytes))!= -1) {
                System.out.println(new String(bytes, 0, len));
            }
            socketClient.shutdownInput();
            socketClient.close();
        }
    }
    
    

    . socket服务端

    package io.github.wangermaizi.day10;
    
    import java.io.*;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    
    // 基于TCP上传的服务端
    public class TCPUploadServe {
        public static void main(String[] args) throws IOException {
            // 1. 读取socket传过来的资源
            ServerSocket socketServe = new ServerSocket(8888);
            // 与客户端建立标识符, 使用客户端的流做输入, 输出
            Socket socketClient = socketServe.accept();
    
            // 创建接收资源的流
            InputStream ips = socketClient.getInputStream();
    
            // 判断保存的文件是否存在, 不存在就自动创建一个
            File file = new File("D:\\upload");
            if (!file.exists()) {
                // 不存在, 创建
                file.mkdirs();
            }
    
            // 输出资源==>保存资源至本地 (文件资源在操作结束之后记得及时关闭)
            FileOutputStream fos = new FileOutputStream(file+ "\\sys.txt");
            int len = 0;
            byte[] bytes = new byte[1024];
            while ((len = ips.read(bytes)) != -1) {
                // 循环读取内容
                fos.write(bytes, 0, len);
            }
            System.out.println("保存成功, 正在告知客户端");
    
            // 保存成功之后告诉客户端保存成功
            OutputStream ops = socketClient.getOutputStream();
            ops.write("上传成功".getBytes());
    
            // 文件写完之后要及时关闭文件资源
            fos.close();
            socketClient.close();
            socketServe.close();
        }
    }
    
    

    相关文章

      网友评论

          本文标题:Java入门--socket文件上传

          本文链接:https://www.haomeiwen.com/subject/ewepwktx.html