java实现文件传输

it2025-08-08  19

在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();    }}

转载于:https://www.cnblogs.com/bhlsheji/p/4363617.html

相关资源:Java实现文件的上传下载
最新回复(0)