import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.net.*;
import java.io.*;
public class RTFReceiveFrame {
JFileChooser jfc;
JFrame fr;
ServerSocket ss;
Socket socket;
JButton btnAccept;
JButton btnCancel;
public RTFReceiveFrame() {
//界面布局
jfc = new JFileChooser();
fr = new JFrame("接收文件");
JLabel lblMsg = new JLabel("对方发来文件请接收...");
btnAccept = new JButton("接收");
btnCancel = new JButton("取消");
JPanel pnlBtn = new JPanel();
pnlBtn.add(btnAccept);
pnlBtn.add(btnCancel);
Container c = fr.getContentPane();
c.setLayout(new BorderLayout());
c.add(BorderLayout.CENTER,lblMsg);
c.add(BorderLayout.SOUTH,pnlBtn);
fr.setBounds(100,100,200,300);
fr.setVisible(true);
//注册事件
AcceptHandler hander= new AcceptHandler();
btnAccept.addActionListener( hander);
btnCancel.addActionListener( hander);
fr.addWindowListener(new WindowHandler());
//不断监听,并接收发送的文件名
try {
ss = new ServerSocket(5800);
while(!ss.isClosed()){
socket = ss.accept();
DataInputStream din = new DataInputStream(socket.getInputStream());
String fileName = din.readUTF();
lblMsg.setText(fileName);
}
} catch (IOException e) {
if(ss.isClosed()){
System.out.println("结束");
}else{
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new RTFReceiveFrame();
}
class AcceptHandler implements ActionListener{
public void actionPerformed(ActionEvent e){
//如果同意接收同,则启动线程接收文件
if(btnAccept == e.getSource()){
String s="你确定要接收对方传来的文件吗";
int type=JOptionPane.YES_NO_OPTION;
String title="确认对话框";
int choice=0;
choice=JOptionPane.showConfirmDialog(fr,s,title,type);
if(choice==0) jfc.showSaveDialog(fr);
RTFReceive receive = new RTFReceive(jfc.getSelectedFile(),socket);
receive.start();
}else if(btnCancel == e.getSource()){
System.out.println("用户不接收该文件!");
System.exit(0);
}
}
}
//关闭窗口的同时,回收资源
class WindowHandler extends WindowAdapter {
public void windowClosing(WindowEvent e) {
System.out.println("文件发送完毕!");
try {
ss.close();
System.exit(0);
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}
class RTFReceive extends Thread{
private File receiveFile;
private Socket socket;
public RTFReceive(File receiveFile, Socket socket) {
this.receiveFile = receiveFile;
this.socket = socket;
}
public void run() {
//判断用户是否保存文件
if(receiveFile == null){
System.out.println("没有保留该文件!");
return;
}else{
//保存文件后,则向发送方发送同意(true)
try {
DataOutputStream dout = new DataOutputStream(socket.getOutputStream());
dout.writeBoolean(true);
} catch (IOException e) {
e.printStackTrace();
}
}
//begin receive file
System.out.println("Begin receive...");
try {
FileOutputStream fout = new FileOutputStream(receiveFile);
BufferedOutputStream bout = new BufferedOutputStream(fout);
BufferedInputStream bin = new BufferedInputStream(socket.getInputStream());
byte[] buf = new byte[2048];
int num = bin.read(buf);
while(num != -1){
bout.write(buf,0,num);
bout.flush();
num = bin.read(buf);
}
bout.close();
bin.close();
System.out.println("文件接收完毕!");
} catch (Exception e) {
e.printStackTrace();
}finally{
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
wenjianchuanshu.rar_文件传输
版权申诉
30 浏览量
2022-09-23
10:29:08
上传
评论
收藏 10KB RAR 举报
![avatar](https://profile-avatar.csdnimg.cn/5f02f331e1ea4222a10b21da48ddddbe_weixin_42651748.jpg!1)
JonSco
- 粉丝: 77
- 资源: 1万+
最新资源
- 数据库管理工具:dbeaver-ce-23.3.0-stable.x86-64.rpm
- 数据库管理工具:dbeaver-ce-23.3.0-macos-x86-64.dmg
- 数据库管理工具:dbeaver-ce-23.3.0-macos-aarch64.dmg
- 数据库管理工具:dbeaver-ce-23.2.5-stable.x86-64.rpm
- 数据库管理工具:dbeaver-ce-23.2.5-macos-x86-64.dmg
- 数据库管理工具:dbeaver-ce-23.2.5-macos-aarch64.dmg
- Kettle上连接HDFS,同步虚拟机上MySQL数据到HDFS
- 数据库管理工具:dbeaver-ce-23.2.4-x86-64-setup.exe
- 数据库管理工具:dbeaver-ce-23.2.4-stable.x86-64.rpm
- 含小数的十进制转N进制源代码.rar
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)