![200792101.jpg](https://i-blog.csdnimg.cn/blog_migrate/3e8affd1dc5c1133e30f59874562e370.jpeg)
![200792102.jpg](https://i-blog.csdnimg.cn/blog_migrate/9ea6a32f5d8f1d48c6841d5ce58fecd7.jpeg)
![200792103.jpg](https://i-blog.csdnimg.cn/blog_migrate/f32dd6f56c830cfa54eb67ab5bb33f17.jpeg)
文件接收部分
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)
{
}
}
}
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();
}
}
}
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();
}
}
}