java文件传输

java文件传输_第1张图片
java文件传输_第2张图片
java文件传输_第3张图片

文件接收部分

FileReceiver.java

package com.vista.Util;

import java.io.IOException;
import java.net.ServerSocket;

public   class  FileReceiver  extends Thread
{
    
private  ServerSocket s  =   null ;    
    
private   int  FILE_PORT ; // 文件传输的监听端口
     private  User user  =   null ;
    
public   FileReceiver(User us)
    {
        
this .FILE_PORT  =  us.getUdpPort(); // 设置文件端口
         this .user = us;
    }
    
public   void  run()
    {
        
try
        {
            s 
=   new  ServerSocket(FILE_PORT);
            System.
out .println( " 用户端开始监听: " + s);
            
while ( true )
                {
                java.net.Socket  socket 
=  s.accept();
                System.
out .println( " 连接接受 " + socket);
                
new  FileReceiverThread(user,socket);
            }
        }
        
catch (IOException e)
        {
            e.printStackTrace();
        }
        
catch (java.lang.Exception ex)
        {
            System.err.println(ex.getMessage().toString());
            ex.printStackTrace();
        }
        
finally
        {
            
try  
            {
                s.close();
            } 
            
catch  (IOException e) 
            {
                
//  TODO Auto-generated catch block
                e.printStackTrace();
            }
        }    
    }

}

FileReceiverThread.java
package com.vista.Util;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Date;

import com.vista.Form.SingleChatForm;

public   class  FileReceiverThread extends Thread
{
    
private  SingleChatForm chatForm  =   null ;
    
private  java.net.Socket socket  =   null ;
    
private  java.io.InputStream  in   =   null ; // 从客户端读数据的
     private  java.io.PrintWriter  out   =   null ; // 向客户端写数据
     private  String serverMsg;
    
private  User sender  = null ;
    
private  User receiver  = null ;
    
private  com.vista.Util.Sender MsgSender  =   null ;
    

    
public  FileReceiverThread (User us,Socket socket)
    {
        
this .receiver = us;
            
try  
            {
                
this .socket  =  socket;
            
this . in   =   this .socket.getInputStream();
                
this . out   =   new  PrintWriter( new  BufferedWriter( new  OutputStreamWriter( this .socket.getOutputStream())), true );
            } 
            
catch  (IOException e) 
            {
//  TODO Auto-generated catch block
                e.printStackTrace();
            }
            
this .start(); // 启动线程
    }

    
public   void  run()
    {
         String info  
=   "" ;
        
try
        {      
            
while ( true )   
            {   
                
// 第一个参数为命令   
                Date befor  =   new  Date();
                
     
                
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 ( " cp " .equals(cmds))
                {   
                    
byte [] filename  =   new   byte [ 256 ];   
                    b 
=   0 ;   
                    
while (b < cmd.length)
                    { 
                        b 
+=   in .read(filename, b, filename.length - b);   
                    }   
                    ends 
=   0 ;   
                    
for ( int  i = 0 ;i < cmd.length;i ++ )
                    { 
                        
if (filename[i] ==- 0 )
                        {   
                            ends 
=  i;   
                            
break ;   
                        }   
                    }   
                    String filenames 
=   new  String(filename, 0 ,ends);
                    filenames 
=   " F:// " + filenames;
                    
                    File fileout 
=   new  File(filenames);   

                    
                    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 ];   
 
                     while ( true )
                    {   
                        
if (ta == 0 )
                        {   
                            
break ;   
                        }   
                        
int  len  =  ta;   
                        
if (len > buf.length)
                        {   
                            len 
=  buf.length;   
                        }   
                        
int  rlen  =   in .read(buf,  0 , len);   

                        ta  -=  rlen;   
                        
if (rlen > 0 )
                        {   
                            fos.write(buf,
0 ,rlen);   
                            fos.flush();   
                        }   
                        
else
                        {   
                            
break ;   
                        }   
                    }   
                    Date after 
=   new  Date();
                    
long  diff  = after.getTime()  -  befor.getTime();
                    diff 
/= 1000 ;

                   info  =   " 传输完成!文件已经保存到: " + filenames + " ,文件大小: " + filesizes + " 字节, " + " 共用时间: " + diff + " " ;
                   
int  result  =  javax.swing.JOptionPane.showConfirmDialog( null , info,  " 文件传输 " ,  javax.swing.JOptionPane.YES_NO_OPTION, javax.swing.JOptionPane.INFORMATION_MESSAGE);
                
                   fos.close(); 
                   
break ;   
                }   
            }   
            
// socket.close();   
            }
        
catch (Exception e)
        {
            e.printStackTrace();   
        }   
          
try  
            {
                
this .socket.close();
            } 
            
catch  (IOException ex1)
            {
            }
             
    }
}

文件发送线程
FileSender.java
package com.vista.Util;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public   class  FileSender extends Thread
{
    
private  Socket socket  =   null ; // 客户端socket
     private  OutputStream  out   =   null ; // 向服务器写数据
     private   int  RECEIVER_PORT  =   - 1 ; // 接收者端口
   

     private  File fileToSend  =   null ; // 要传输的文件
    
    
public  FileSender(File file, int  Receiver_Port)
    {
        
this .fileToSend  =  file;
        
this .RECEIVER_PORT  =  Receiver_Port; // 设置接收方端口
         try  
        {
            
this .socket  =   new  Socket(InetAddress.getLocalHost(),RECEIVER_PORT);
            
out   =  socket.getOutputStream(); // 向接收者发数据的
        } 
        
catch  (UnknownHostException e) 
        {
            
//  TODO Auto-generated catch block
            e.printStackTrace();
        } 
        
catch  (IOException e) 
        {
            
//  TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    
public   void  run()
    {
        
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 ;   
        
try  
        {
            
out .write(cmd, 0 ,cmd.length);
        } 
        
catch  (IOException e)
        {
            e.printStackTrace();
        }   
         
// 文件名   
         byte [] file  =   new   byte [ 256 ];   
        
byte [] tfile  =   this .fileToSend.getName().getBytes();   
        
for ( int  i = 0 ;i < tfile.length;i ++ )
        {
            file[i] 
=  tfile[i];   
        }   
        file[tfile.length] 
=   - 0 ;   
        
try  
        {
            
out .write(file, 0 ,file.length);
        } 
        
catch  (IOException e) 
        {
            e.printStackTrace();
        }          
         
// 大小      
         byte [] size  =   new   byte [ 64 ];   
        
byte [] tsize  =  ( "" + this .fileToSend.length()).getBytes();   
           
        
for ( int  i = 0 ;i < tsize.length;i ++ )
        { 
            size[i] 
=  tsize[i];   
        }   
           
        size[tsize.length] 
=   - 0 ;   
        
try  
        {
            
out .write(size, 0 ,size.length);
        } 
        
catch  (IOException e) 
        {
            
//  TODO Auto-generated catch block
            e.printStackTrace();
        }   
           
        FileInputStream fis 
=   null ;   
        
byte [] buf  =   new   byte [ 1024 * 10 ];    
        
try  
        {
            fis 
=   new  FileInputStream( this .fileToSend);
        } 
        
catch  (FileNotFoundException e) 
        {
            e.printStackTrace();
        }   
        
int  readsize  =   0 ;    
         
try  
         {
            
while ((readsize  =  fis.read(buf,  0 , buf.length)) > 0 )
            {   
                
out .write(buf, 0 ,readsize);   
                
out .flush();  
            }
        } 
        
catch  (IOException e)
        {
            e.printStackTrace();
        }   

    }

}

你可能感兴趣的:(java)