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

}

java实现文件传输的更多相关文章

  1. Java简单文件传输 socket简单文件传输示例

    服务器端代码: import java.io.*; import java.net.*; /** * Created with IntelliJ IDEA. * User: HYY * Date: 1 ...

  2. Java Tcp文件传输---转载

    /** 客户端 1.服务端点 2.读取客户端已有的文件数据 3.通过socket输出流发给服务端 4.读取服务端反馈信息 5.关闭 **/ import java.io.*; import java. ...

  3. java 接口 文件传输

    调用接收端 @ApiOperation(value = "文件请求展示方法") @RequestMapping(value = "/showFile", met ...

  4. java对于文件传输时---编码格式的一些设置方法

    - ----转 读文件: BufferedReader 从字符输入流中读取文本,缓冲各个字符,从而提供字符.数组和行的高效读取. 可以指定缓冲区的大小,或者可使用默认的大小.大多数情况下,默认值就足够 ...

  5. 循序渐进Java Socket网络编程(多客户端、信息共享、文件传输)

    目录[-] 一.TCP/IP协议 二.TCP与UDP 三.Socket是什么 四.Java中的Socket 五.基本的Client/Server程序 六.多客户端连接服务器 七.信息共享 八.文件传输 ...

  6. Java基于Socket文件传输示例(转)

    最近需要进行网络传输大文件,于是对基于socket的文件传输作了一个初步的了解.在一位网友提供的程序基础上,俺进行了一些加工,采用了缓冲输入/输出流来包装输出流,再采用数据输入/输出输出流进行包装,加 ...

  7. java基于P2P的聊天和文件传输实例

    用java的NIO技术编写的 1. 支持聊天功能 2. 拖拽文件能够实现文件传输功能.也能够是目录 3. 启动时能够选择server端或client端启动 4. 本人原创.学习NIO和java的网络通 ...

  8. Java使用Socket传输文件遇到的问题(转)

    1.写了一个socket传输文件的程序,发现传输过去文件有问题.找了一下午终于似乎找到了原因,记录下来警示一下: 接受文件的一端,向本地写文件之前使用Thread.sleep(time)休息一下就解决 ...

  9. Java使用Socket传输文件遇到的问题

    1.写了一个socket传输文件的程序,发现传输过去文件有问题.找了一下午终于似乎找到了原因,记录下来警示一下: 接受文件的一端,向本地写文件之前使用Thread.sleep(time)休息一下就解决 ...

随机推荐

  1. [WPF疑难] 继承自定义窗口

    原文 [WPF疑难] 继承自定义窗口 [WPF疑难] 继承自定义窗口 周银辉 项目中有不少的弹出窗口,按照美工的设计其外边框(包括最大化,最小化,关闭等按钮)自然不同于Window自身的,但每个弹出框 ...

  2. BZOJ 1018

    program bzoj1018; type node=..] of boolean; pair=..] of boolean; var tot,c,i,j,k,x1,y1,x2,y2:longint ...

  3. Treasure Exploration(二分最大匹配+floyd)

    Treasure Exploration Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 7455   Accepted: 3 ...

  4. exp-00091 oracle错误的解决办法

    在进行数据库导入导出使用命令exp.imp经常出现exp-00091 这样的错误的时候,我们需要做的是对于环境变量NLS_LANG设置正确 首先,我们先查看需要导出的数据库的字符编码    selec ...

  5. 静态化 - 伪静态技术(PHP正则表达式实现)

    效果: 代码: <?php // + —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— —— // + 正则表达式,实 ...

  6. Markdown 11 种基础语法

    现在是我在学习Markdown时做的笔记.学完这些Markdown的基本使用已经不成问题. 1. 标题设置(让字体变大,和word的标题意思一样)在Markdown当中设置标题,有两种方式: 第一种: ...

  7. Memcache 查看列出所有key方法

    参考博文: Memcache 查看列出所有key方法 1. cmd上登录memcache telnet 127.0.0.1 11211  2. 列出所有keys stats items // 这条是命 ...

  8. 基于FPGA的DW8051移植(二)

    基于上一篇博文继续,本来想换到oc8051,但是还是不甘心,弄了这么久还是没有弄出来,真是打击屎了. 上一篇说3f进入了operation code所以判断是代码错误,后来发现不可以这么判断. 因为地 ...

  9. Android学习笔记:多个AsyncTask实例的并发问题

    AsyncTask是Android给开发者提供的一个简单轻量级的多线程类,通过它我们可以很容易新建一个线程让在后台做一些耗时的操作(如IO操作.网络访问等),并在这个过程中更新UI.之所以说它轻量级, ...

  10. 基于visual Studio2013解决C语言竞赛题之0423比赛安排

       题目