自己用Java Socket开发的一个网盘,创建删除出了问题
Swing窗口中有4个按钮,分别是”创建 删除 上传 下载“(上传和下载没开发出来,主要不是这个。是创建和删除)
登陆后-第1次按创建/删除按钮时服务器会报错无法创建文件/删除文件
-第2次按的时候才会创建/删除上一次的文件,第2次的创建/删除的文件会在第3次的时候创建/删除,第3次会被推迟到第4次,以此类推
客户端:
package com.ruilong.software;
import javax.swing.*;
import javax.swing.plaf.FontUIResource;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;
/**
* @author Jimsss
* @version 1.0
* @deprecated 软件主类
*/
public class Software {
public JFrame softwareFrame = new JFrame();
public JPanel panel = new JPanel();
public JMenuBar menuBar = new JMenuBar();
public JMenu softwareMenu = new JMenu();
public JMenuItem exitMenuItem = new JMenuItem();
public JMenuItem deleteUserMenuItem = new JMenuItem();
public JMenuItem aboutMenuItem = new JMenuItem();
public JLabel softwareLabel = new JLabel();
public Font allFont = new Font("宋体",Font.PLAIN,32);
public static LoginOrRegister LOGIN_OR_REGISTER = new LoginOrRegister();
public String titleMsg = "RuiLongSoftware";
public String aboutMsg = "Jimsss";
public String welcomeAdmin = "----------------欢迎您,管理员!----------------";
public String welcomeUser1 = "欢迎您";
public String welcomeUser2 = "用户";
public String softwareMenuMsg = "软件";
public String exitMenuItemMsg = "退出软件";
public String deleteUserMenuItemMsg = "注销账户";
public String aboutMenuItemMsg = "关于我们";
public int width = 800;
public int height = 500;
public JButton creativeFileButton = new JButton();
public JButton deleteFileButton = new JButton();
public JButton uploadFileButton = new JButton();
public JButton downloadFileButton = new JButton();
public String creativeFileButtonMsg = "创建文件";
public String deleteFileButtonMsg = "删除文件";
public String uploadFileButtonMsg = "上传文件";
public String downloadFileButtonMsg = "下载文件";
public JFrame fileFrame = new JFrame();
public JPanel filePanel = new JPanel();
public JLabel label = new JLabel();
public JTextField textField = new JTextField();
public JButton button = new JButton();
public String filePath = "C:\\Nginx\\nginx-1.20.2\\html\\user\\";
//Socket
public Socket socket = new Socket();
public String serverIP = "127.0.0.1";
public int serverPort = 8192;
public BufferedWriter bufferedWriter;
public String userName1;
public String errorMsg = "客户端错误,请检查Java错误代码:";
public void SoftwareWindow(String userName){
softwareFrame.setTitle(titleMsg);
softwareFrame.setSize(width,height);
softwareFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
softwareFrame.setResizable(false);
softwareFrame.setContentPane(panel);
softwareFrame.setJMenuBar(menuBar);
softwareFrame.getContentPane().setBackground(Color.WHITE);
softwareMenu.setText(softwareMenuMsg);
softwareMenu.setFont(allFont);
menuBar.add(softwareMenu);
exitMenuItem.setText(exitMenuItemMsg);
exitMenuItem.setFont(allFont);
exitMenuItem.setBackground(Color.ORANGE);
exitMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
});
softwareMenu.add(exitMenuItem);
softwareMenu.addSeparator();
deleteUserMenuItem.setText(deleteUserMenuItemMsg);
deleteUserMenuItem.setFont(allFont);
deleteUserMenuItem.setBackground(Color.BLUE);
deleteUserMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
LOGIN_OR_REGISTER.deleteUser(userName);
}
});
softwareMenu.add(deleteUserMenuItem);
aboutMenuItem.setText(aboutMenuItemMsg);
aboutMenuItem.setFont(allFont);
aboutMenuItem.setBackground(Color.CYAN);
aboutMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
UIManager.put("OptionPane.buttonFont", new FontUIResource(allFont));
UIManager.put("OptionPane.messageFont", new FontUIResource(allFont));
JOptionPane.showMessageDialog(null, aboutMsg);
}
});
softwareMenu.add(aboutMenuItem);
softwareLabel.setFont(allFont);
if (userName.equals("Admin")){
softwareLabel.setForeground(Color.RED);
softwareLabel.setText(welcomeAdmin);
}else {
softwareLabel.setForeground(Color.BLUE);
softwareLabel.setText(welcomeUser1 + userName + welcomeUser2);
}
panel.add(softwareLabel);
//SOFTWARE
creativeFileButton.setFont(allFont);
creativeFileButton.setForeground(Color.RED);
creativeFileButton.setText(creativeFileButtonMsg);
creativeFileButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
FileWindow();
//Socket
try {
socket = new Socket(serverIP, serverPort);
bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bufferedWriter.write(userName);
bufferedWriter.newLine();
bufferedWriter.write("creative");
bufferedWriter.newLine();
bufferedWriter.write(filePath);
bufferedWriter.flush();
socket.shutdownOutput();
}catch (IOException exception){
System.out.println(errorMsg + exception);
}
}
});
panel.add(creativeFileButton);
deleteFileButton.setFont(allFont);
deleteFileButton.setForeground(Color.RED);
deleteFileButton.setText(deleteFileButtonMsg);
deleteFileButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
FileWindow();
//Socket
try {
socket = new Socket(serverIP, serverPort);
bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bufferedWriter.write(userName);
bufferedWriter.newLine();
bufferedWriter.write("delete");
bufferedWriter.newLine();
bufferedWriter.write(filePath);
bufferedWriter.flush();
socket.shutdownOutput();
}catch (IOException exception){
System.out.println(errorMsg + exception);
}
}
});
panel.add(deleteFileButton);
uploadFileButton.setFont(allFont);
uploadFileButton.setForeground(Color.RED);
uploadFileButton.setText(uploadFileButtonMsg);
uploadFileButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
FileWindow();
//Socket
try {
socket = new Socket(serverIP, serverPort);
bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bufferedWriter.write(userName);
bufferedWriter.newLine();
bufferedWriter.write("upLoad");
bufferedWriter.newLine();
bufferedWriter.write(filePath);
bufferedWriter.flush();
socket.shutdownOutput();
}catch (IOException exception){
System.out.println(errorMsg + exception);
}
}
});
panel.add(uploadFileButton);
downloadFileButton.setFont(allFont);
downloadFileButton.setForeground(Color.RED);
downloadFileButton.setText(downloadFileButtonMsg);
downloadFileButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
FileWindow();
//Socket
try {
socket = new Socket(serverIP, serverPort);
bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bufferedWriter.write(userName);
bufferedWriter.newLine();
bufferedWriter.write("DownLoad");
bufferedWriter.newLine();
bufferedWriter.write(filePath);
bufferedWriter.flush();
socket.shutdownOutput();
}catch (IOException exception){
System.out.println(errorMsg + exception);
}
}
});
panel.add(downloadFileButton);
userName1 = userName;
softwareFrame.setVisible(true);
}
public void FileWindow(){
fileFrame.setTitle(titleMsg);
fileFrame.setSize(width,height);
fileFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
fileFrame.setResizable(false);
fileFrame.setContentPane(filePanel);
fileFrame.getContentPane().setBackground(Color.WHITE);
label.setFont(allFont);
label.setText("目录");
label.setForeground(Color.BLUE);
filePanel.add(label);
textField.setFont(allFont);
textField.setColumns(20);
textField.setText("");
textField.setForeground(Color.RED);
filePanel.add(textField);
button.setFont(allFont);
button.setText("好");
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
filePath = "C:\\Nginx\\nginx-1.20.2\\html\\user\\" + userName1 + "\\" + textField.getText() + "\\";
fileFrame.setVisible(false);
}
});
filePanel.add(button);
fileFrame.setVisible(true);
}
}
客户端首先向服务器发送用户名 再发送命令 最后发送路径
然后服务器监听到信息就会接收在根据内容删除/创建
服务器:
package com.ruilong.server;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
public ServerSocket serverSocket = null;
public Socket socket = new Socket();
public BufferedReader bufferedReader = null;
public String userName = null;
public String serverCommand = null;
public String filePath = null;
public File file = null;
public void Server(int serverPort) {
try {
serverSocket = new ServerSocket(serverPort);
System.out.println("RuiLong网盘服务器");
System.out.println("正在监听服务端......");
System.out.println("服务器IP:" + serverSocket.getInetAddress().getHostAddress());
System.out.println("服务器端口号:" + serverSocket.getLocalPort());
System.out.println("----------------------------------------------------------");
for (; true; ) {
socket = serverSocket.accept();
bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
userName = bufferedReader.readLine();
serverCommand = bufferedReader.readLine();
filePath = bufferedReader.readLine();
System.out.println("监听到一条信息:IP:" + socket.getInetAddress().getHostAddress() + ",PORT:" + socket.getPort() + "用户名:" + userName);
switch (serverCommand){
case "nullCommand":
System.out.println("没有任何命令");
break;
case "creative":
CreativeFile();
break;
case "delete":
DeleteFile();
break;
case "upLoad":
UpLoad();
break;
case "downLoad":
DownLoad();
break;
default:
System.err.println("未知的命令!");
break;
}
}
}catch (IOException e){
System.out.println("服务器错误!错误信息:" + e);
}
}
public void CreativeFile(){
file = new File(filePath);
try {
if (file.mkdirs()){
System.out.println("文件夹:" + file.getName() + ",已成功创建");
}else if (!file.mkdirs()){
System.err.println("文件创建失败");
}
}catch (Exception e){
System.err.println("服务器文件创建失败!错误信息:" + e);
}
}
public void DeleteFile(){
file = new File(filePath);
try {
if (file.delete()){
System.out.println("文件夹:" + file.getName() + ",已成功删除");
}else if (!file.delete()){
System.err.println("文件删除失败");
}
}catch (Exception e){
System.err.println("服务器文件删除失败!错误信息:" + e);
}
}
public void UpLoad(){
}
public void DownLoad(){
}
}
_第一次报错(内容:文件创建失败/文件删除失败),以后就不报错了,但有问题
我觉得应该是文件创建/删除出问题了 Socket应该,没问题
不报错 按正常的那样就好了