package com.vista.Util;
import java.io.IOException;
import java.net.ServerSocket;publicclassFileReceiver extends Thread
{privateServerSocket s=null;privateintFILE_PORT ;//文件传输的监听端口privateUser user=null;publicFileReceiver(User us)
{this.FILE_PORT=us.getUdpPort();//设置文件端口this.user=us;
}publicvoidrun()
{try{
s=newServerSocket(FILE_PORT);
System.out.println("用户端开始监听:"+s);while(true)
{
java.net.Socket socket=s.accept();
System.out.println("连接接受"+socket);newFileReceiverThread(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 blocke.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;publicclassFileReceiverThread extends Thread
{privateSingleChatForm chatForm=null;privatejava.net.Socket socket=null;privatejava.io.InputStreamin=null;//从客户端读数据的privatejava.io.PrintWriterout=null;//向客户端写数据privateString serverMsg;privateUser sender=null;privateUser receiver=null;privatecom.vista.Util.Sender MsgSender=null;publicFileReceiverThread (User us,Socket socket)
{this.receiver=us;try{this.socket=socket;this.in=this.socket.getInputStream();this.out=newPrintWriter(newBufferedWriter(newOutputStreamWriter(this.socket.getOutputStream())),true);
}catch(IOException e)
{//TODO Auto-generated catch blocke.printStackTrace();
}this.start();//启动线程}publicvoidrun()
{
String info="";try{while(true)
{//第一个参数为命令Date befor=newDate();bytecmd[]=newbyte[128];intb=0;while(b
{
b+=in.read(cmd, b, cmd.length-b);
}intends=0;for(inti=0;i
{if(cmd[i]==-0)
{
ends=i;break;
}
}
String cmds=newString(cmd,0,ends);if("cp".equals(cmds))
{byte[] filename=newbyte[256];
b=0;while(b
{
b+=in.read(filename, b, filename.length-b);
}
ends=0;for(inti=0;i
{if(filename[i]==-0)
{
ends=i;break;
}
}
String filenames=newString(filename,0,ends);
filenames="F://"+filenames;
File fileout=newFile(filenames);FileOutputStream fos=newFileOutputStream(fileout);byte[] filesize=newbyte[64];
b=0;while(b
{
b+=in.read(filesize, b, filesize.length-b);
}
ends=0;for(inti=0;i
{if(filesize[i]==-0)
{
ends=i;break;
}
}
String filesizes=newString(filesize,0,ends);
System.out.println("filesize:"+filesizes);intta=Integer.parseInt(filesizes);byte[] buf=newbyte[1024*10];while(true)
{if(ta==0)
{break;
}intlen=ta;if(len>buf.length)
{
len=buf.length;
}intrlen=in.read(buf,0, len);ta-=rlen;if(rlen>0)
{
fos.write(buf,0,rlen);
fos.flush();
}else{break;
}
}
Date after=newDate();longdiff=after.getTime()-befor.getTime();
diff/=1000;info="传输完成!文件已经保存到:"+filenames+",文件大小:"+filesizes+"字节,"+"共用时间:"+diff+"秒";intresult=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)
{
}
}
}