Compare commits

...

2 Commits

Author SHA1 Message Date
JianGuo 7d2bd6175b 1.优化 2024-06-14 16:41:55 +08:00
JianGuo 9567c1defe 1.修改bug 2024-06-14 15:12:53 +08:00
7 changed files with 82 additions and 27 deletions

View File

@ -7,6 +7,7 @@ import com.xiaoliu.handler.FileSendClientHandler;
import com.xiaoliu.handler.LoginResponseHandler;
import com.xiaoliu.protocol.FilePacket;
import com.xiaoliu.protocol.request.LoginPacket;
import com.xiaoliu.window.MainWindow;
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
@ -73,9 +74,10 @@ public class Client {
log.info("连接服务器成功");
Channel channel = future.channel();
joinCluster(channel);
MainWindow.setStatus(0);
} else {
log.info("连接服务器失败");
MainWindow.setStatus(1);
}
future.channel().closeFuture().sync();

View File

@ -3,6 +3,7 @@ package com.xiaoliu.handler;
import com.xiaoliu.codec.Codec;
import com.xiaoliu.protocol.FilePacket;
import com.xiaoliu.protocol.Packet;
import com.xiaoliu.window.MainWindow;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
@ -43,6 +44,7 @@ public class FileSendClientHandler extends ChannelInboundHandlerAdapter {
ctx.writeAndFlush(fileRegion).addListener(future -> {
if (future.isSuccess()) {
log.info("{} 发送完成...", file.getName());
MainWindow.notify("文件发送完成:" + file.getName());
}
});
}

View File

@ -35,6 +35,9 @@ public class MainWindow extends JFrame {
// 初始化UI组件
initializeComponents();
//tuichu
hock();
}
private void initStatusLabel() {
@ -51,6 +54,21 @@ public class MainWindow extends JFrame {
statusLabel.setForeground(color);
}
public static void setStatus(int status) {
if (statusLabel == null) {
return;
}
if (status == 0) {
statusLabel.setText("已连接");
statusLabel.setForeground(Color.GREEN);
notify("已连接服务器 ...");
} else {
statusLabel.setText("未连接");
statusLabel.setForeground(Color.RED);
notify("连接失败 ...");
}
}
private void initializeComponents() {
// 在这里添加你的组件初始化代码
// 创建一个JTextArea用于显示日志
@ -83,8 +101,6 @@ public class MainWindow extends JFrame {
//新起一个县城去初始化netty
try {
sendButton.setEnabled(false);
setLogText("连接成功...");
setStatusLabel("已连接", Color.GREEN);
stopButton.setEnabled(true);
Client.init(host, Integer.parseInt(port));
} catch (Exception ex) {
@ -110,7 +126,6 @@ public class MainWindow extends JFrame {
// 示例添加一个按钮点击时向文本区域添加日志信息
JButton startButton = new JButton("发送");
startButton.addActionListener(e -> {
JFileChooser fileChooser = new JFileChooser();
fileChooser.setCurrentDirectory(new java.io.File(System.getProperty("user.home") + "/Desktop"));
@ -139,6 +154,7 @@ public class MainWindow extends JFrame {
Client.shutdown();
setStatusLabel("未连接", Color.RED);
sendButton.setEnabled(true);
stopButton.setEnabled(false);
});
@ -165,6 +181,13 @@ public class MainWindow extends JFrame {
return logTextArea;
}
public static void notify(String text) {
if (logTextArea == null) {
return;
}
logTextArea.append(text + "\n");
}
public void setLogText(String text) {
logTextArea.append(text + "\n");
}
@ -183,4 +206,9 @@ public class MainWindow extends JFrame {
getContentPane().add(scrollPane, BorderLayout.CENTER);
}
public void hock() {
log.info("退出执行...");
//优雅退出
Runtime.getRuntime().addShutdownHook(new Thread(Client::shutdown));
}
}

View File

@ -10,6 +10,8 @@ public class FilePacket extends Packet {
File file;
long fileLength;
int ACK;
@Override
@ -22,10 +24,12 @@ public class FilePacket extends Packet {
public FilePacket(File file) {
this.file = file;
this.fileLength = file.length();
}
public FilePacket(File file, int ACK) {
this.file = file;
this.fileLength = file.length();
this.ACK = ACK;
}
@ -44,4 +48,12 @@ public class FilePacket extends Packet {
public void setACK(int ACK) {
this.ACK = ACK;
}
public long getFileLength() {
return fileLength;
}
public void setFileLength(long fileLength) {
this.fileLength = fileLength;
}
}

View File

@ -27,6 +27,14 @@ public class LoginPacket extends Packet {
boolean exec = false;
public void flush() {
this.exec = false;
this.fileName = null;
this.fileLength = 0;
this.readLength = 0;
this.fileOutputStream = null;
}
@Override
public Byte getCommand() {
return LOGIN_PACKET_REQUEST;

View File

@ -25,8 +25,8 @@ public class FilePacketServerHandler extends SimpleChannelInboundHandler<FilePac
}
loginPacket.setExec(true);
loginPacket.setFileName(file.getName());
loginPacket.setFileLength(file.length());
loginPacket.setFileOutputStream(new FileOutputStream(new File("./server-receive-" + file.getName())));
loginPacket.setFileLength(packet.getFileLength());
loginPacket.setFileOutputStream(new FileOutputStream(new File("./service-receive-" + file.getName())));
// FileReceiveServerHandler.fileLength = file.length();
// FileReceiveServerHandler.outputStream = new FileOutputStream(
// new File("./server-receive-" + file.getName())

View File

@ -43,20 +43,23 @@ public class FileReceiveServerHandler extends ChannelInboundHandlerAdapter {
byteBuf.release();
}
private void sendComplete(long readLength) throws IOException {
if (readLength >= fileLength) {
log.info("文件接收完成.....");
outputStream.close();
}
}
// private void sendComplete(long readLength) throws IOException {
// if (readLength >= fileLength) {
// log.info("文件接收完成.....");
// outputStream.close();
// }
// }
private void sendComplete(LoginPacket loginPacket) throws IOException {
log.debug("ReadLength {}", loginPacket.getReadLength());
log.debug("FileLength {}", loginPacket.getFileLength());
if (loginPacket.getReadLength() >= loginPacket.getFileLength()) {
log.info("文件接收完成...");
loginPacket.setExec(false);
loginPacket.setReadLength(0);
if(loginPacket.getFileOutputStream() != null){
loginPacket.getFileOutputStream().close();
}
loginPacket.flush();
}
}
}