62,621
社区成员
发帖
与我相关
我的任务
分享Server.java
package finished;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.text.DecimalFormat;
import javax.swing.*;
public class Server extends JFrame {
private JLabel filePath, fileSendRate, fileStatus, space;
private JFileChooser jfc;
private JPanel filePanel;
private JButton sendButton;
private JProgressBar fileProgressBar;
ServerSocket socket;
Socket connectionsocket;
boolean isConnected;
int result;
String filePaths;
String fileName;
public Server(String title) throws Exception {
super(title);
setLayout(new BorderLayout());
sendButton = new JButton("发送");
sendButton.addActionListener(new Send());
filePath = new JLabel("path");//路径
fileStatus = new JLabel("sta");//发送状态
fileSendRate = new JLabel("filesendrate");//发送速度
space = new JLabel();
fileProgressBar = new JProgressBar(0, 100);
fileProgressBar.setStringPainted(true);
filePanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
filePanel.add(sendButton);
getContentPane().add(filePanel, BorderLayout.NORTH);
getContentPane().add(fileProgressBar, BorderLayout.SOUTH);
getContentPane().add(filePath);
getContentPane().add(fileStatus);
getContentPane().add(fileSendRate);
getContentPane().add(space);
fileStatus.setBounds(100, 90, 200, 20);
filePath.setBounds(100, 50, 200, 20);
fileSendRate.setBounds(100, 150, 200, 20);
space.setBounds(100, 180, 200, 20);
setBounds(100, 100, 300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
ServerSocket localsocket = new ServerSocket(8989);
JOptionPane.showMessageDialog(null, "服务器已经开启", "提示", 2);
System.out.println("服务器已经开启...");
while (true) {
connectionsocket = localsocket.accept();
isConnected = true;
JOptionPane.showMessageDialog(null, "客户端已链接", "提示", 2);
System.out.println("客户端已链接");
}
}
//
private String fileLength(long length) {
double klength = length * 1.0 / 1024;
DecimalFormat df = new DecimalFormat("0.00");
if (klength < 1024) {
return (df.format(klength) + "K");
} else {
return (df.format(klength / 1024) + "M");
}
}
class Send implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (isConnected == true) {
JFileChooser fc = new JFileChooser();
result = fc.showOpenDialog(sendButton);
final File file = fc.getSelectedFile();
Runnable runnable = new Runnable() {
public void run() {
int passed = 0;
fileProgressBar.setValue(0);
if (file != null
&& result == JFileChooser.APPROVE_OPTION) {
filePaths = file.getAbsolutePath();
System.out.println("文件路径: " + filePaths);
fileName = file.getName();
filePath.setText(fileName);
long filelength = file.length();
System.out.println("文件长度:" + filelength);
try {
File file1 = new File(filePaths);
FileInputStream fos = new FileInputStream(file1);
OutputStream netOut = connectionsocket
.getOutputStream();
DataOutputStream doc = new DataOutputStream(
new BufferedOutputStream(netOut));
doc.writeLong(filelength);
doc.flush();
byte[] buf = new byte[4096];
int num = fos.read(buf);
while (num != (-1)) {
passed += num;
doc.write(buf, 0, num);
doc.flush();
num = fos.read(buf);
System.out.println(passed);
final int x = (int) (100 * (passed / (double) filelength));
if (x == 0) {
fileStatus.setText("等待对方接受");
} else if (x == 100) {
fileStatus.setText("对方接受完毕");
fos.close();
doc.close();
} else {
fileStatus.setText("对方正在接受");
}
fileSendRate.setText(passed + "字节/"
+ filelength + "字节");
SwingUtilities.invokeLater(new Runnable() {
public void run() {
fileProgressBar.setValue(x);
fileProgressBar.setString(String
.valueOf(x)
+ "%");
System.out.println("已经接受:" + x
+ "%");
}
});
}
/*fos.close();
doc.close();*/
} catch (Exception ex) {
System.out.println(ex);
}
}
if (result == JFileChooser.CANCEL_OPTION) {
}
}
};
Thread thread = new Thread(runnable);
thread.start();
}
}
}
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
new Server("文件传输服务器端");
}
}
Client.java
package finished;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import java.text.DecimalFormat;
import java.util.Date;
import javax.swing.*;
public class Client extends JFrame {
private JLabel filePath, fileSendRate, fileStatus, space;
private JPanel filePanel;
private JButton saveButton;
private JProgressBar fileProgressBar;
Socket sockets;
private boolean isConnected;
JFileChooser fc;
String filePaths;
String fileName;
float filelength;
int result;
public Client(String title) throws Exception {
super(title);
setLayout(new BorderLayout());
saveButton = new JButton("接收");
saveButton.addActionListener(new SaveFile());
filePath = new JLabel("path");//路径
fileStatus = new JLabel("sta");//传输状态
fileSendRate = new JLabel("filesendrate");//传输速度
space = new JLabel();
fileProgressBar = new JProgressBar(0, 100);//进度条
fileProgressBar.setStringPainted(true);
filePanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
filePanel.add(saveButton);
getContentPane().add(filePanel, BorderLayout.NORTH);
getContentPane().add(fileProgressBar, BorderLayout.SOUTH);
getContentPane().add(filePath);
getContentPane().add(fileStatus);
getContentPane().add(fileSendRate);
getContentPane().add(space);
fileStatus.setBounds(100, 90, 200, 20);
filePath.setBounds(100, 50, 200, 20);
fileSendRate.setBounds(100, 150, 200, 20);
space.setBounds(100, 180, 200, 20);
setBounds(100, 100, 300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
sockets = new Socket("localhost", 8989);
System.out.println("已连接");
JOptionPane.showMessageDialog(null, "已与服务器连接", "提示", 2);
isConnected = true;
}
class SaveFile implements ActionListener {
public void actionPerformed(ActionEvent e) {
isConnected = true;
if (isConnected == true) {
fc = new JFileChooser();
result = fc.showSaveDialog(saveButton);
File file1 = fc.getSelectedFile();
filePaths = file1.getAbsolutePath();
System.out.println("filePath:" + filePaths);
fileName = file1.getName();
filePath.setText(fileName);
if (file1 != null && result == JFileChooser.APPROVE_OPTION) {
Runnable run = new Runnable() {
public void run() {
try {
int passed = 0;
fileProgressBar.setValue(0);
File file2 = new File(filePaths);
file2.createNewFile();
RandomAccessFile raf = new RandomAccessFile(
file2, "rw");
InputStream netIn = sockets.getInputStream();
DataInputStream in = new DataInputStream(
new BufferedInputStream(netIn));
long filelength = in.readLong();
System.out.println("要接收的文件长度为" + filelength
+ "字节");
byte[] buf = new byte[1024 * 128];
int num = in.read(buf);
passed = 0;
while (num != (-1)) {
raf.write(buf, 0, num);
raf.skipBytes(num);
passed += num;
num = in.read(buf);
final int x = (int) (100 * (passed / (double) filelength));
if (x == 0) {
fileStatus.setText("对方正在等待你的接收");
} else if (x == 100) {
fileStatus.setText("你已经成功接收");
} else {
fileStatus.setText("正在接收中");
}
fileSendRate.setText(passed + "字节/"
+ filelength + "字节");
SwingUtilities.invokeLater(new Runnable() {
public void run() {
fileProgressBar.setValue(x);
fileProgressBar.setString(String
.valueOf(x)
+ "%");
}
});
}
in.close();
raf.close();
System.out.println("文件已收到");
} catch (Exception ex) {
}
}
};
Thread t = new Thread(run);
t.start();
}
if (result == JFileChooser.CANCEL_OPTION) {
}
}
isConnected = false;
}
}
public static void main(String[] args) throws Exception {
new Client("文件传输客户端");
}
}
in.close();
raf.close();
System.out.println("文件已收到");
刚试了下 if (x == 0) {
fileStatus.setText("等待对方接受");
} else if (x == 100) {
fileStatus.setText("对方接受完毕");
fos.close();
doc.close(); in.close();
raf.close();
System.out.println("文件已收到");
这可是你自己关闭的,哪有自动关闭