zoukankan      html  css  js  c++  java
  • java实现文件传输

    在windows下装了个linux虚拟机,两者之间传输文件挺麻烦的.写了个简单的文件传输程序,来方便自己数据传送.

    server 端:

    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;

    class CPThread extends Thread{
        Socket socket 
    = null;
        
    public CPThread(Socket socket){
            
    this.socket = socket;
        }

        
    public void run(){
            
    try{
                InputStream in 
    = 
                          socket.getInputStream();
                PrintWriter out 
    = 
                      
    new PrintWriter(
                        
    new BufferedWriter(
                          
    new OutputStreamWriter(
                            socket.getOutputStream())),
    true);
                
                
    while(true)
                
    {
                    
    //第一个參数为命令
                    byte cmd[] = new byte[128];
                    
    int b = 0;
                    
    while(b<cmd.length){
                        b 
    += in.read(cmd, b, cmd.length-b);
                    }

                    
    int ends = 0;
                    
    for(int i=0;i<cmd.length;i++){
                        
    if(cmd[i]=='-0'){
                            ends 
    = i;
                            
    break;
                        }

                    }

                    String cmds 
    = new String(cmd,0,ends);
                    
    if("exit".equals(cmds)){
                        System.exit(
    0);
                    }

                    
    else if("cp".equals(cmds)){
                        
    byte[] filename = new byte[256];
                        b 
    = 0;
                        
    while(b<filename.length){
                            b 
    += in.read(filename, b, filename.length-b);
                        }

                        ends 
    = 0;
                        
    for(int i=0;i<filename.length;i++){
                            
    if(filename[i]=='-0'){
                                ends 
    = i;
                                
    break;
                            }

                        }

                        String filenames 
    = new String(filename,0,ends);
                        File fileout 
    = new File(filenames);
                        
    if(fileout.isFile()){
                            
    throw new Exception("file exists"+fileout.getAbsolutePath());
                        }

                        FileOutputStream fos 
    = new FileOutputStream(fileout);
                        
                        
    byte[] filesize = new byte[64];
                        b 
    = 0;
                        
    while(b<filesize.length){
                            b 
    += in.read(filesize, b, filesize.length-b);
                        }

                        
                        ends 
    = 0;
                        
    for(int i=0;i<filesize.length;i++){
                            
    if(filesize[i]=='-0'){
                                ends 
    = i;
                                
    break;
                            }

                        }

                        String filesizes 
    = new String(filesize,0,ends);
                        
                        System.out.println(
    "filesize:"+filesizes);
                        
    int ta = Integer.parseInt(filesizes);
                        
    byte[] buf = new byte[1024*10];
                        
    //InputStream ins = socket.getInputStream();
                        while(true){
                            
    if(ta==0){
                                
    break;
                            }

                            
    int len = ta;
                            
    if(len>buf.length){
                                len 
    = buf.length;
                            }

                            
    int rlen = in.read(buf, 0, len);
                            
                            
    //int rlen = ins.read(buf, 0, len);
                            ta -= rlen;
                            
    if(rlen>0){
                                fos.write(buf,
    0,rlen);
                                fos.flush();
                            }

                            
    else{
                                
    break;
                            }

                        }

                        out.println(
    "cp finish!");
                        fos.close();
                        
    break;
                    }

                    
    else{
                        System.out.println(
    "err command!");
                        out.println(
    "err command!");
                        
    break;
                    }

                }

                socket.close();
            }
    catch(Exception e){
                e.printStackTrace();
                
            }

        }

    }

    public class JCPServer {

        
    /**
         * 
    @param args
         
    */

        
    public static void main(String[] args) throws Exception {
            
    // TODO Auto-generated method stub
            int num = args.length;
            
    if(num<=0){
                System.out.println(
    "please input server port!");
                System.exit(
    0);
            }

            
    int port = Integer.parseInt(args[0]);
            System.out.println(
    "you input port:"+port);
            
    //绑定接受数据端口
            ServerSocket s = new ServerSocket(port);
            
    while(true){
                Socket socket 
    = s.accept();
                
    new CPThread(socket).start();
            }

        }


    }

    client 端

    import java.io.BufferedWriter;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.OutputStream;
    import java.io.OutputStreamWriter;
    import java.io.PrintWriter;
    import java.net.InetAddress;
    import java.net.Socket;


    public class JCPClient {

        
    /**
         * 
    @param args
         
    */

        
    public static void main(String[] args)throws Exception {
            
    // TODO Auto-generated method stub
            int num = args.length;
            
    if(num<=3){
                System.out.println(
    "please input server ip port filefrom fileto!");
                System.exit(
    0);
            }

            System.out.println(
    "host:"+args[0]);
            System.out.println(
    "port:"+args[1]);
            System.out.println(
    "filefrom:"+args[2]);
            System.out.println(
    "fileto:"+args[3]);
            InetAddress addr 
    = InetAddress.getByName(args[0]);
            Socket socket 
    = 
                  
    new Socket(addr, Integer.parseInt(args[1]));
            OutputStream out 
    = socket.getOutputStream();
            
    byte[] cmd = new byte[128];
            
    byte[] tcmd = "cp".getBytes();
            
    for(int i=0;i<tcmd.length;i++){
                cmd[i] 
    = tcmd[i];
            }

            cmd[tcmd.length] 
    = '-0';
            out.write(cmd,
    0,cmd.length);
            
    //文件名称
            byte[] file = new byte[256];
            
    byte[] tfile = args[3].getBytes();
            
    for(int i=0;i<tfile.length;i++){
                file[i] 
    = tfile[i];
            }

            file[tfile.length] 
    = '-0';
            out.write(file,
    0,file.length);
            
            
    //大小
            File filein = new File(args[2]);
            
    byte[] size = new byte[64];
            
    byte[] tsize = (""+filein.length()).getBytes();
            
            
    for(int i=0;i<tsize.length;i++){
                size[i] 
    = tsize[i];
            }

            size[tsize.length] 
    = '-0';
            out.write(size,
    0,size.length);
            
            FileInputStream fis 
    = null;
            
    byte[] buf = new byte[1024*10];
            
    //char[] bufC = new char[1024*10];
            fis = new FileInputStream(filein);
            
    int readsize = 0;
            
    //OutputStream ops = socket.getOutputStream();
            while((readsize = fis.read(buf, 0, buf.length))>0){
                out.write(buf,
    0,readsize);
                out.flush();
            }

            socket.close();
        }


    }

  • 相关阅读:
    leetcode Remove Linked List Elements
    leetcode Word Pattern
    leetcode Isomorphic Strings
    leetcode Valid Parentheses
    leetcode Remove Nth Node From End of List
    leetcode Contains Duplicate II
    leetcode Rectangle Area
    leetcode Length of Last Word
    leetcode Valid Sudoku
    leetcode Reverse Bits
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4013955.html
Copyright © 2011-2022 走看看