热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java实现文件传输

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

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


}


推荐阅读
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 学习Java异常处理之throws之抛出并捕获异常(9)
    任务描述本关任务:在main方法之外创建任意一个方法接收给定的两个字符串,把第二个字符串的长度减1生成一个整数值,输出第一个字符串长度是 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • 纠正网上的错误:自定义一个类叫java.lang.System/String的方法
    本文纠正了网上关于自定义一个类叫java.lang.System/String的错误答案,并详细解释了为什么这种方法是错误的。作者指出,虽然双亲委托机制确实可以阻止自定义的System类被加载,但通过自定义一个特殊的类加载器,可以绕过双亲委托机制,达到自定义System类的目的。作者呼吁读者对网上的内容持怀疑态度,并带着问题来阅读文章。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
author-avatar
夕阳隐日
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有