zoukankan      html  css  js  c++  java
  • java 网络编程(五)Socket多线程上传文件

    客户端:

    package cn.sasa.socketUploadFileDemo;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    
    public class SocketClientDemo {
    
        public static void main(String[] args) throws IOException {
            Socket socket = new Socket("127.0.0.1",8050);
            OutputStream output = socket.getOutputStream();
            
            FileInputStream inputFile = new FileInputStream("D:\sasa\Weixin.zip");
            byte[] buff = new byte[1024];
            int len = 0;
            while((len = inputFile.read(buff)) != -1) {
                output.write(buff,0,len);
            }
            //传完后告诉服务器上传完成,否则服务器会一直等待读取
            socket.shutdownOutput();
            
            InputStream input = socket.getInputStream();
            len = input.read(buff);
            System.out.println(new String(buff,0,len));
            
            socket.close();
            inputFile.close();
        }
    }

    服务端:

    package cn.sasa.socketUploadFileDemo;
    
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    public class ServerSocketDemo {
    
        public static void main(String[] args) throws IOException {
            ServerSocket server = new ServerSocket(8050);
            //一直监听
            while(true) {
                Socket clientSocket = server.accept();
                Thread th = new Thread(new UploadRunnable(clientSocket));
                th.start();
            }
        }
    
    }

    Runnable接口的实现类UploadRunnable.java,用于上传文件

    package cn.sasa.socketUploadFileDemo;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    
    public class UploadRunnable implements Runnable {
    
        private Socket clientSocket;
        public UploadRunnable(Socket socket) {
            this.clientSocket = socket;
        }
        @Override
        public void run() {
            try {
                InputStream input = clientSocket.getInputStream();
                File upload = new File("D:\upload");
                if(!upload.exists()) {
                    upload.mkdirs();
                }
                //文件命名
                String fileName = "sasa"+ System.currentTimeMillis()+".zip";
                FileOutputStream outputFile = new FileOutputStream(upload+File.separator+fileName);
                byte[] buff = new byte[1024];
                int len = 0;
                while((len = input.read(buff)) != -1) {
                    outputFile.write(buff,0,len);
                }
                OutputStream output = clientSocket.getOutputStream();
                output.write("上传完成".getBytes());
                outputFile.close();
                clientSocket.close();
            }catch(Exception ex) {
                ex.printStackTrace();
            }
        }
    
    }
  • 相关阅读:
    跟layout_weight说88,轻松搞定百分比布局
    跟闪退、程序崩溃说88
    程序的需求层次
    开博
    第十章 数组与集合 发牌程序 实例代码
    C#面向对象基础01
    winform form
    html
    C#语言基础02
    C#语言基础01
  • 原文地址:https://www.cnblogs.com/SasaL/p/10304296.html
Copyright © 2011-2022 走看看