java文件传输

200792101.jpg
200792102.jpg
200792103.jpg

文件接收部分

FileReceiver.java

<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--> packagecom.vista.Util;

importjava.io.IOException;
importjava.net.ServerSocket;

public class FileReceiverextendsThread
{
private ServerSockets = null ;
private int FILE_PORT; // 文件传输的监听端口
private Useruser = null ;
public FileReceiver(Userus)
{
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.Socketsocket
= s.accept();
System.
out .println( " 连接接受 " + socket);
new FileReceiverThread(user,socket);
}
}
catch (IOExceptione)
{
e.printStackTrace();
}
catch (java.lang.Exceptionex)
{
System.err.println(ex.getMessage().toString());
ex.printStackTrace();
}
finally
{
try
{
s.close();
}
catch (IOExceptione)
{
// TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}

}

FileReceiverThread.java
packagecom.vista.Util;

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

importcom.vista.Form.SingleChatForm;

public class FileReceiverThreadextendsThread
{
private SingleChatFormchatForm = null ;
private java.net.Socketsocket = null ;
private java.io.InputStream in = null ; // 从客户端读数据的
private java.io.PrintWriter out = null ; // 向客户端写数据
private StringserverMsg;
private Usersender = null ;
private Userreceiver = null ;
private com.vista.Util.SenderMsgSender = null ;


public FileReceiverThread(Userus,Socketsocket)
{
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 (IOExceptione)
{
// TODOAuto-generatedcatchblock
e.printStackTrace();
}
this .start(); // 启动线程
}

public void run()
{
Stringinfo
= "" ;
try
{
while ( true )
{
// 第一个参数为命令
Datebefor = 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 ;
}
}
Stringcmds
= 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 ;
}
}
Stringfilenames
= new String(filename, 0 ,ends);
filenames
= " F:// " + filenames;

Filefileout
= new File(filenames);


FileOutputStreamfos
= 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 ;
}
}
Stringfilesizes
= 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 ;
}
}
Dateafter
= 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 (Exceptione)
{
e.printStackTrace();
}
try
{
this .socket.close();
}
catch (IOExceptionex1)
{
}

}
}

文件发送线程

<!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--> FileSender.java
packagecom.vista.Util;

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

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

private FilefileToSend = null ; // 要传输的文件

public FileSender(Filefile, int Receiver_Port)
{
this .fileToSend = file;
this .RECEIVER_PORT = Receiver_Port; // 设置接收方端口
try
{
this .socket = new Socket(InetAddress.getLocalHost(),RECEIVER_PORT);
out = socket.getOutputStream(); // 向接收者发数据的
}
catch (UnknownHostExceptione)
{
// TODOAuto-generatedcatchblock
e.printStackTrace();
}
catch (IOExceptione)
{
// TODOAuto-generatedcatchblock
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 (IOExceptione)
{
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 (IOExceptione)
{
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 (IOExceptione)
{
// TODOAuto-generatedcatchblock
e.printStackTrace();
}

FileInputStreamfis
= null ;
byte []buf = new byte [ 1024 * 10 ];
try
{
fis
= new FileInputStream( this .fileToSend);
}
catch (FileNotFoundExceptione)
{
e.printStackTrace();
}
int readsize = 0 ;
try
{
while ((readsize = fis.read(buf, 0 ,buf.length)) > 0 )
{
out .write(buf, 0 ,readsize);
out .flush();
}
}
catch (IOExceptione)
{
e.printStackTrace();
}

}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值