TCP实现上传文件功能

一丶客户端

具体步骤看代码

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.net.Socket;

public class Client {

    public static void main(String[] args) throws Exception {

        //1.创建客户端Socket对象,并指定ip跟端口
        Socket s = new Socket("127.0.0.1",6666);

        //2.将Socket中封装好的字节输出流包装成缓冲字节输出流
        BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());

        //3.从指定的路径中读取要上传的文件上传到服务端
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:/待上传文件.txt"));
        //IO流经典4行代码
        byte[] b = new byte[1024];
        int len;
        while((len=bis.read(b))!=-1){
            bos.write(b, 0, len);
        }
        //将文件内容从缓存器刷新到服务端
        bos.flush();
        //告诉服务端,客户端已经上传完毕
        s.shutdownOutput();

        //4.获取服务端的返回结果
        //将Socket中封装好的字节输入流包装成字节缓冲输入流
        BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
        //读取
        String string = br.readLine();
        System.out.println(string);

        //关闭资源
        bis.close();//自己创建的字节缓冲输出流
        s.close();//关闭Socket,其自己封装好的输入输出流也将关闭
    }
}

二丶服务端

具体步骤看代码

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.UUID;

public class Server {

    public static void main(String[] args) throws Exception {

        //1.创建服务端ServerSocket对象,并指定端口号
        ServerSocket socket = new ServerSocket(6666);

        //2.无限循环接受客户端发的请求
        while(true){
            Socket s = socket.accept();//阻塞式,即客户端木有请求就一直等待

            //3.将ServerSocket中封装好的输入流包装成字节输入流
            BufferedInputStream bis = new BufferedInputStream(s.getInputStream());

            //4.将客户端上传的文件保存到指定的路径中
            //为防止文件名重复     用UUID随机数+当前上传的毫秒值
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("D:/"+UUID.randomUUID().toString().replaceAll("-", "")+System.currentTimeMillis()+".txt"));
            //IO流经典4行代码
            byte[] b = new byte[1024];
            int len;
            while((len=bis.read(b))!=-1){
                bos.write(b, 0, len);
            }

            //5.通过客户端连接对象获取字节输出流并包装成字节缓冲输出流
            BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
            bw.write("文件上传成功");
            bw.newLine();
            bw.flush();

            //6.关闭资源
            bos.close();
            s.close();
        }
    }
}

版权声明:本文为weixin_43020373原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。