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();//设置文件端口
s = new ServerSocket(FILE_PORT);
System.out.println("用户端开始监听:"+s);
java.net.Socket socket = s.accept();
System.out.println("连接接受"+socket);
new FileReceiverThread(user,socket);
catch(java.lang.Exception ex)
System.err.println(ex.getMessage().toString());
// TODO Auto-generated catch block
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
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.in = this.socket.getInputStream();
this.out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(this.socket.getOutputStream())),true);
{// TODO Auto-generated catch block
byte cmd[] = new byte[128];
b += in.read(cmd, b, cmd.length-b);
for(int i=0;i<cmd.length;i++)
String cmds = new String(cmd,0,ends);
byte[] filename = new byte[256];
b += in.read(filename, b, filename.length-b);
for(int i=0;i<cmd.length;i++)
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 += in.read(filesize, b, filesize.length-b);
for(int i=0;i<filesize.length;i++)
String filesizes = new String(filesize,0,ends);
System.out.println("filesize:"+filesizes);
int ta = Integer.parseInt(filesizes);
byte[] buf = new byte[1024*10];
int rlen = in.read(buf, 0, len);
long diff =after.getTime() - befor.getTime();
info = "传输完成!文件已经保存到:"+filenames+",文件大小:"+filesizes+"字节,"+"共用时间:"+diff+"秒";
int result = javax.swing.JOptionPane.showConfirmDialog(null, info, "文件传输", javax.swing.JOptionPane.YES_NO_OPTION, javax.swing.JOptionPane.INFORMATION_MESSAGE);
import java.io.BufferedReader;
import java.io.BufferedWriter;
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.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.RECEIVER_PORT = Receiver_Port;//设置接收方端口
this.socket = new Socket(InetAddress.getLocalHost(),RECEIVER_PORT);
out = socket.getOutputStream();//向接收者发数据的
catch (UnknownHostException e)
// TODO Auto-generated catch block
// TODO Auto-generated catch block
byte[] cmd = new byte[128];
byte[] tcmd = "cp".getBytes();
for(int i=0;i<tcmd.length;i++)
out.write(cmd,0,cmd.length);
byte[] file = new byte[256];
byte[] tfile = this.fileToSend.getName().getBytes();
for(int i=0;i<tfile.length;i++)
out.write(file,0,file.length);
byte[] size = new byte[64];
byte[] tsize = (""+this.fileToSend.length()).getBytes();
for(int i=0;i<tsize.length;i++)
out.write(size,0,size.length);
// TODO Auto-generated catch block
FileInputStream fis = null;
byte[] buf = new byte[1024*10];
fis = new FileInputStream(this.fileToSend);
catch (FileNotFoundException e)
while((readsize = fis.read(buf, 0, buf.length))>0)
out.write(buf,0,readsize);
本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2007/09/21/902016.html,如需转载请自行联系原作者