java文件传输
文件接收部分
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)
{
}
}
}
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();
}
}
}
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();
}
}
}
作者:洞庭散人
出处:http://phinecos.cnblogs.com/
本博客遵从Creative Commons Attribution 3.0 License,若用于非商业目的,您可以自由转载,但请保留原作者信息和文章链接URL。
posted on 2007-09-21 23:26 Phinecos(洞庭散人) 阅读(11583) 评论(31) 编辑 收藏 举报