CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 扩展类

如何实现多线程文件传输!

楼主Kyori_YR()2006-03-20 09:24:46 在 Java / J2SE / 扩展类 提问

如何实现多线程文件传输,那位高手能给个例子我看看!一个服务器,多个客户端。多个客户端连同一服务器,如何使用多线程? 问题点数:50、回复次数:3Top

1 楼treeroot(旗鲁特)回复于 2006-03-20 12:46:22 得分 0

upTop

2 楼Kyori_YR()回复于 2006-03-20 13:50:01 得分 0

高手门,来看看Top

3 楼Java_yR_26()回复于 2006-03-30 09:18:31 得分 50

import   java.io.BufferedInputStream;  
  import   java.io.DataInputStream;  
  import   java.io.DataOutputStream;  
  import   java.io.File;  
  import   java.io.IOException;  
  import   java.io.InputStream;  
  import   java.io.RandomAccessFile;  
  import   java.net.InetAddress;  
  import   java.net.ServerSocket;  
  import   java.net.Socket;  
   
  public   class   Test{  
   
          String   line;  
          String   name;  
          long   fileSize;  
          ServerSocket   ssFile   =   null;  
          ServerSocket   ssMessage   =   null;  
          Socket   server   =   null;  
          Socket   serverMessage   =   null;  
           
          int   n   =   0;  
   
  Test()  
  {  
          try    
          {  
                  ssMessage   =   new   ServerSocket(5150);  
                  ssFile   =   new   ServerSocket(5151);  
          }    
          catch   (IOException   e)    
          {  
                  //   TODO   Auto-generated   catch   block  
                  e.printStackTrace();  
          }  
  }  
  public   void   getFile()  
  {  
   
          try  
          {        
          System.out.println("\nSocket监听服务已经启动。");  
                  System.out.println("正在等待客户端程序的请求   ...\n");  
                  while(true)  
                  {  
                  server   =   ssFile.accept();  
                  serverMessage   =   ssMessage.accept();  
                   
                  System.out.println(server.getInetAddress()+"连接");  
                          ReceiveFile   receiveFile   =   new   ReceiveFile(server,serverMessage);  
                          receiveFile.start();  
                          System.out.println(receiveFile.getState());  
                  }  
                   
          }  
          catch   (Exception   ex)  
          {  
                  ex.printStackTrace();  
          }  
  }  
          /**  
            *   @param   args  
            */  
          public   static   void   main(String[]   args)   {  
                          //   TODO   Auto-generated   method   stub  
                          Test   test   =   new   Test();  
                          test.getFile();                        
          }  
  }  
  class   ReceiveFile   extends   Thread  
  {  
  Socket   server   =   null;  
  Socket   serverMessage   =   null;  
  String   line;  
          String   name;  
          long   fileSize;  
          String   filePath;  
          int   s,e;  
          boolean   state;  
          ReceiveFile(Socket   server,Socket   serverMessage)  
          {  
          try  
          {  
          this.server   =   server;  
          this.serverMessage   =   serverMessage;  
          }  
          catch(Exception   ex)  
          {  
          ex.printStackTrace();  
          }  
          }  
  public   void   run()  
  {  
    try  
    {  
    System.out.println(Thread.currentThread());  
    DataInputStream   is   =   new   DataInputStream(serverMessage.getInputStream());  
                    DataOutputStream   os   =   new   DataOutputStream(serverMessage.getOutputStream());  
                    line   =   is.readUTF();  
                    for(int   i   =   0;i<line.length();i++)  
                    {  
                    if(line.charAt(i)=='|')  
                    {  
                    state   =   true;  
                    }  
                    }  
                    if(state)  
                    {  
                    for(int   i   =   0;i<line.length();i++)  
                    {  
                    if(line.charAt(i)=='?')  
                    {  
                    name   =   line.substring(0,i);  
                    s   =   i+1;  
                    }  
                    if(line.charAt(i)=='|')  
                    {  
                    filePath   =   line.substring(i+1);  
                                  e   =   i;  
                    }  
                    }  
                 
                    fileSize   =   Long.parseLong(line.substring(s,e));  
                   
                    //System.out.println(name);  
                  File   file   =   new   File("c:\\temp\\"+filePath+File.separator);  
                  file.mkdirs();                  
                  System.out.println(file.getAbsolutePath()+File.separator+name);  
                  File   filename   =   new   File(file.getAbsolutePath()+File.separator+name);  
                  if(filename.exists())  
                  {  
                  filename.delete();  
                  System.out.println("文件已经存在!");  
                  }  
                   
                  filename.createNewFile();  
                  RandomAccessFile   raf   =   new   RandomAccessFile(filename,"rw");    
                  if(server.isClosed())  
                  System.out.println("server   close!");  
                  InputStream   netln   =   server.getInputStream();  
                  InputStream   in   =   new   DataInputStream(new   BufferedInputStream(netln));      
                  byte[]   buf   =   new   byte[2048];  
                  int   num   =   in.read(buf);  
                                                  System.out.println("开始接收...");  
                  while(num!=(-1))  
                  {  
                          raf.write(buf,0,num);  
                          raf.skipBytes(num);  
                          num=in.read(buf);  
                  }  
                  if(filename.length()==fileSize)  
                  {  
                              os.writeUTF("S");  
                      os.flush();  
                     
                  }  
                  else  
                  {  
                      os.writeUTF("F");  
                      os.flush();  
                  }  
                  in.close();  
                  raf.close();  
                  //System.out.println(line   +   "大小"   +   fileSize   +   "已保存到C:\\");  
                  System.out.println(server.getInetAddress()+"文件名:"+name+"   大小:"+fileSize+"   已保存到C:\\temp\\");  
                    }  
                    else  
                    {  
                    for(int   i   =   0;i<line.length();i++)  
                    {  
                    if(line.charAt(i)=='?')  
                    {  
                    name   =   line.substring(0,i);  
                    fileSize   =   Long.parseLong(line.substring(i+1));  
                    }  
                    }  
                    //System.out.println(name);  
                  File   file   =   new   File("c:\\temp\\"+name);  
                  if(file.exists())  
                  {  
                  file.delete();  
                  System.out.println("文件已经存在!");  
                  }  
                   
                  file.createNewFile();  
                  RandomAccessFile   raf   =   new   RandomAccessFile(file,"rw");    
                  if(server.isClosed())  
                  System.out.println("server   close!");  
                  InputStream   netln   =   server.getInputStream();  
                  InputStream   in   =   new   DataInputStream(new   BufferedInputStream(netln));      
                  byte[]   buf   =   new   byte[2048];  
                  int   num   =   in.read(buf);  
                                                  System.out.println("开始接收...");  
                  while(num!=(-1))  
                  {  
                          raf.write(buf,0,num);  
                          raf.skipBytes(num);  
                          num=in.read(buf);  
                  }  
                  if(file.length()==fileSize)  
                  {  
                              os.writeUTF("S");  
                      os.flush();  
                  }  
                  else  
                  {  
                      os.writeUTF("F");  
                      os.flush();  
                  }  
                  in.close();  
                  raf.close();  
                  //System.out.println(line   +   "大小"   +   fileSize   +   "已保存到C:\\");  
                  System.out.println(server.getInetAddress()+"文件名:"+name+"   大小:"+fileSize+"   已保存到C:\\");  
                    }  
    }  
    catch(Exception   ex)  
    {  
          ex.printStackTrace();  
    }  
  }  
  }  
  Top

相关问题

  • socket多线程传输文件 急用!
  • 有谁看过,这期《程序员》上的《多线程文件传输的实现及其性能的研究》?
  • ^有谁看过,这期《程序员》上的《多线程文件传输的实现及其性能的研究》?^
  • 文件传输程序:IdUDPServer如何实现多线程接受客户端数据?
  • 如何实现多线程分块下载文件呀?
  • 请教用nmHttp实现多线程同时下载不同文件的技术!
  • 多线程下载文件
  • 多线程下载文件
  • 如何用socket进行多线程进行文件传输?如果能解决100分
  • 如何实现多线程?

关键词

  • .net
  • 多线程
  • 客户
  • socket
  • null
  • server
  • ssfile
  • ssmessage
  • serversocket
  • io

得分解答快速导航

  • 帖主:Kyori_YR
  • Java_yR_26

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo