• 【Java】TCP从客户端上传文件保存到服务端并给出反馈(多线程改进版)


    客户端

    package LearnJava17.Tcptx4;
    
    import java.io.*;
    import java.net.Socket;
    
    public class ClientDemo {
        public static void main(String[] args) throws IOException {
            Socket s=new Socket("127.0.0.1",10000);
            BufferedReader br=new BufferedReader(new FileReader("D:\\MyProject\\Java\\Demo2\\src\\LearnJava17\\Tcptx3\\test.txt"));
            BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
    
            String line;
            while ((line=br.readLine())!=null){
                bw.write(line);
                bw.newLine();
                bw.flush();
            }
    
    //        自定义结束标记
    //        bw.write("886");
    //        bw.newLine();
    //        bw.flush();
    
    //        标准结束标记
            s.shutdownOutput();
    
    //        接收反馈
            BufferedReader brClient=new BufferedReader(new InputStreamReader(s.getInputStream()));
            String data = brClient.readLine();
            System.out.println("服务器反馈:"+data);
    
            s.close();
            br.close();
        }
    }

    服务端

    package LearnJava17.Tcptx4;
    
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class ServerDemo {
        public static void main(String[] args) throws IOException {
            ServerSocket ss=new ServerSocket(10000);
            while (true){
                Socket s = ss.accept();
                new Thread(new ServerThread(s)).start();
            }
        }
    }

    多线程

    package LearnJava17.Tcptx4;
    
    import java.io.*;
    import java.net.Socket;
    
    public class ServerThread implements Runnable{
        private Socket s;
        public ServerThread(Socket s) {
            this.s=s;
        }
    
        @Override
        public void run() {
            try {
                BufferedReader br=new BufferedReader(new InputStreamReader(s.getInputStream()));
    //            BufferedWriter bw=new BufferedWriter(new FileWriter("D:\\MyProject\\Java\\Demo2\\src\\LearnJava17\\Tcptx4\\test2.txt"));
    //            解决名称问题
                int count=0;
                File file=new File("D:\\MyProject\\Java\\Demo2\\src\\LearnJava17\\Tcptx4\\test("+count+").txt");
                while (file.exists()){
                    count++;
                    file=new File("D:\\MyProject\\Java\\Demo2\\src\\LearnJava17\\Tcptx4\\test("+count+").txt");
                }
                BufferedWriter bw=new BufferedWriter(new FileWriter(file));
    
                String line;
                while ((line=br.readLine())!=null){
                    bw.write(line);
                    bw.newLine();
                    bw.flush();
                }
                //      给出反馈
                BufferedWriter bwServer =new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
                bwServer.write("文件上传成功!");
                bwServer.newLine();
                bwServer.flush();
                s.close();
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }

  • 相关阅读:
    Building Apache Thrift on CentOS 6.5
    ToStringBuilder 学习
    对List中对象的去重
    MyEclipse启动Tomcat服务器时老是跳到Debug调试上
    JS 实现点击展开菜单
    详解公钥、私钥、数字证书的概念 转载
    eclipse svn 忽略 target目录 等等... 我用的后边的方法 (转载)
    Log4j XML 配置
    JS完成改变新闻字体大中小的显示
    Javascript 简单学习
  • 原文地址:https://www.cnblogs.com/HGNET/p/16210774.html
Copyright © 2020-2023  润新知