哎呀,我们还是直接放代码吧

客户端代码 

package com.wangLuo;

import java.io.*;
import java.net.Socket;

/**
 * @author 林高禄
 * @create 2020-06-01-10:24
 */
public class TCPClientDemo {
    public static void main(String[] args) throws IOException {
        Socket s = new Socket("192.168.1.55",10);
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
        BufferedReader br = new BufferedReader(new FileReader("test//src//com//wangLuo//《国富论》全本.txt"));
        String line;
        while((line = br.readLine()) != null){
            bw.write(line);
            bw.newLine();
            bw.flush();
        }

        // 向服务端表明数据发送完毕
        s.shutdownOutput();
        BufferedReader br1 = new BufferedReader(new InputStreamReader(s.getInputStream()));
        System.out.println(br1.readLine());
        br.close();
        s.close();
    }
}

服务端线程代码,这是主要的代码,线程处理写入文件操作,并且给客户端做出响应

package com.wangLuo;

import java.io.*;
import java.net.Socket;

/**
 * @author 林高禄
 * @create 2020-06-01-10:28
 */
public class TCPServerDemoThread implements  Runnable{
    private Socket s;
    private int count;

    public TCPServerDemoThread(Socket s, int count) {
        this.s = s;
        this.count = count;
    }

    @Override
    public void run() {
        BufferedWriter bw = null;
        BufferedWriter bw1 = null;
        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
            bw = new BufferedWriter(new FileWriter("test//src//com//wangLuo//《国富论》全本copy【"+count+"】.txt"));
            String line;
            while((line = br.readLine()) != null){
                bw.write(line);
                bw.newLine();
                bw.flush();
            }

            bw1 = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
            bw1.write("文件上传成功");
            bw1.newLine();
            bw1.flush();
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            if(bw != null){
                try{
                    bw.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
            if(bw1 != null){
                try{
                    bw1.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
            if(s != null){
                try{
                    s.close();
                }catch (IOException e){
                    e.printStackTrace();
                }
            }
        }
    }
}

服务端代码,while循环,每次客户端请求,就调用一次服务端线程,计数增加,这样一个客户端请求就是一个文件,不会造成文件覆盖。

package com.wangLuo;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @author 林高禄
 * @create 2020-06-01-10:28
 */
public class TCPServerDemo {
    public static void main(String[] args) throws IOException {
        ServerSocket ss = new ServerSocket(10);
        int count = 0;
        while(true){
            count++;
            Socket s = ss.accept();
            System.out.println("count==="+count);
            new Thread(new TCPServerDemoThread(s,count)).start();
        }
    }
}

代码完毕,指向服务端,再执行客户端,客户端每次请去就上传一个文件,服务端一直运行。