zoukankan      html  css  js  c++  java
  • java网络编程(7)——利用tcp实现文件上传

    其实客户端与服务端通讯的道理都是一样的,都是通过输入与输出这两个流,那么实现文件上传也就是同样的,客户端把文件读到文件流,服务端用文件流来接受,然后写到一个文件中,这样子就实现了文件上传,文件拷贝也是同样的道理~,具体看代码实现:

    客户端:

    package com.seven.tcp;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.Socket;
    
    public class TcpFileUploadClient {
        
        public static void main(String[] args) throws Exception {
            
            Socket socket = new Socket("127.0.0.1",10001);
            
            FileInputStream fis = new FileInputStream(new File("e:\test.txt"));
            
            OutputStream out = socket.getOutputStream();
            
            byte[] buf = new byte[1024];
            
            int len = 0;
            
            while((len=fis.read(buf))!=-1){
                out.write(buf);
            }
            
            socket.shutdownOutput();
            
            InputStream in = socket.getInputStream();
            
            len = in.read(buf);
            
            System.out.println("return:"+new String(buf,0,len));
            
            fis.close();
            
            socket.close();
            
            
        }
        
    }

    服务端:

    package com.seven.tcp;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;
    
    /**
     * 服务端要用多线程来实现,这样才能实现多个用户同时上传
     * 
     * @author Seven
     *
     */
    public class TcpFileUploadServer {
    
        public static void main(String[] args) throws Exception {
            
            ServerSocket serverSocket = new ServerSocket(10001);
            
            //循环,每次有新的连接就开启一个新的线程
            while(true){
                
                Socket socket = serverSocket.accept();
                
                new Thread(new FileUploadThread(socket)).start();
                
            }
    
        }
    
    }
    
    class FileUploadThread implements Runnable {
    
        private Socket socket;
    
        public FileUploadThread(Socket s) {
            this.socket = s;
        }
    
        // 在run方法中实现文件上传
        public void run() {
    
            try {
    
                System.out.println(socket.getInetAddress().getHostAddress()+"....connected");
                
                String filename = socket.getInetAddress().getHostAddress();
    
                int count = 1;
    
                File file = new File("e:\" + filename + count);
    
                while (file.exists()) {
                    file = new File("e:\" + filename + count++);
                }
    
                FileOutputStream fileOutputStream = new FileOutputStream(file);
    
                InputStream in = socket.getInputStream();
                
                byte[] b = new byte[1024];
    
                int len = 0;
                
                while ((len = in.read(b)) != -1) {
                    fileOutputStream.write(b,0,len);
                }
                //返回成功
                OutputStream out = socket.getOutputStream();
                out.write("success!".getBytes());
                
                socket.close();
    
            }catch (Exception e) {
                e.printStackTrace();
                throw new RuntimeException(e);
            }
    
        }
    
    }
  • 相关阅读:
    推荐随笔
    搭建http服务
    python之numpy和pandas
    eclipse项目打包
    keras安装
    eclipse设置快速提示符
    linux常用命令
    Webpack3 从入门到放弃
    【ES6】Generator+Promise异步编程
    【Vue】删除数组元素,导致剩余元素被重新渲染
  • 原文地址:https://www.cnblogs.com/sevenlin/p/sevenlin_tcpfileupload20150802.html
Copyright © 2011-2022 走看看