diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 954e026..667a8df 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -2,6 +2,7 @@ + diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000..68cc5d4 --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 9e1585c..b7686d0 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -8,7 +8,7 @@ - + \ No newline at end of file diff --git a/demo1/pom.xml b/demo1/pom.xml index 1f54d91..ba203f0 100644 --- a/demo1/pom.xml +++ b/demo1/pom.xml @@ -9,8 +9,28 @@ 1.0-SNAPSHOT - 17 - 17 + 22 + 22 + 1.18.32 + + + + org.projectlombok + lombok + ${lombok.version} + + + + cn.hutool + hutool-all + 5.8.27 + + + org.slf4j + slf4j-api + 2.0.13 + + \ No newline at end of file diff --git a/demo1/src/main/java/cn/bunny/file_dir/ClientDemo.java b/demo1/src/main/java/cn/bunny/file_dir/ClientDemo.java new file mode 100644 index 0000000..6dc3f31 --- /dev/null +++ b/demo1/src/main/java/cn/bunny/file_dir/ClientDemo.java @@ -0,0 +1,17 @@ +package cn.bunny.file_dir; + +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.nio.channels.SocketChannel; + +@Slf4j +public class ClientDemo { + public static void main(String[] args) throws IOException { + SocketChannel socketChannel = SocketChannel.open(); + socketChannel.connect(new InetSocketAddress("localhost", 8080)); + // socketChannel.write(Charset.defaultCharset().encode("hello")) + System.out.println("等待。。。"); + } +} diff --git a/demo1/src/main/java/cn/bunny/file_dir/Server2Demo.java b/demo1/src/main/java/cn/bunny/file_dir/Server2Demo.java new file mode 100644 index 0000000..e1b427b --- /dev/null +++ b/demo1/src/main/java/cn/bunny/file_dir/Server2Demo.java @@ -0,0 +1,61 @@ +package cn.bunny.file_dir; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; +import java.nio.channels.ServerSocketChannel; +import java.nio.channels.SocketChannel; +import java.util.Iterator; + +public class Server2Demo { + public static void main(String[] args) throws IOException { + // 创建Selector + Selector selector = Selector.open(); + + // 创建服务器 + ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); + serverSocketChannel.configureBlocking(false); + SelectionKey selectionKey = serverSocketChannel.register(selector, 0, null); + + // 只关注channel + selectionKey.interestOps(SelectionKey.OP_ACCEPT); + System.out.println(STR."注册时的key:\{selectionKey}"); + + // 模拟监听端口 + serverSocketChannel.bind(new InetSocketAddress(8080)); + + while (true) { + selector.select(); + Iterator iterator = selector.selectedKeys().iterator(); + while (iterator.hasNext()) { + SelectionKey key = iterator.next(); + // 需要移出key,在事件集合中需要移出 + iterator.remove(); + if (key.isAcceptable()) { + ServerSocketChannel cancel = (ServerSocketChannel) key.channel(); + SocketChannel accept = cancel.accept(); + accept.configureBlocking(false); + SelectionKey scKey = accept.register(selector, 0, null); + scKey.interestOps(SelectionKey.OP_READ); + System.out.println(STR."accept的key\{accept}"); + System.out.println(STR."scKey\{scKey}"); + } else if (key.isReadable()) { + try { + SocketChannel channel = (SocketChannel) key.channel(); + ByteBuffer buffer = ByteBuffer.allocate(16); + // 如果客户端断开,这里会报错 + channel.read(buffer); + buffer.flip(); + } catch (IOException exception) { + exception.printStackTrace(); + // 断开后会进行删除 + key.cancel(); + } + + } + } + } + } +} diff --git a/demo1/src/main/java/cn/bunny/file_dir/ServerDemo.java b/demo1/src/main/java/cn/bunny/file_dir/ServerDemo.java new file mode 100644 index 0000000..6aa9b06 --- /dev/null +++ b/demo1/src/main/java/cn/bunny/file_dir/ServerDemo.java @@ -0,0 +1,76 @@ +package cn.bunny.file_dir; + +import lombok.extern.slf4j.Slf4j; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.SelectionKey; +import java.nio.channels.Selector; +import java.nio.channels.ServerSocketChannel; +import java.nio.channels.SocketChannel; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Iterator; + +@Slf4j +public class ServerDemo { + // 阻塞模式下只能接受一个连接 + public static void main(String[] args) throws IOException { + // 创建Selector + Selector selector = Selector.open(); + + // 创建服务器 + ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); + serverSocketChannel.configureBlocking(false); + SelectionKey selectionKey = serverSocketChannel.register(selector, 0, null); + + // 只关注channel时间 + selectionKey.interestOps(SelectionKey.OP_ACCEPT); + System.out.println(STR."注册时的key:\{selectionKey}"); + + // 模拟监听端口 + serverSocketChannel.bind(new InetSocketAddress(8080)); + + while (true) { + selector.select(); + // 处理事件 + Iterator iterator = selector.selectedKeys().iterator(); + while (iterator.hasNext()) { + SelectionKey key = iterator.next(); + System.out.println(STR."key的值为\{key}"); + ServerSocketChannel channel = (ServerSocketChannel) key.channel(); + SocketChannel accept = channel.accept(); + System.out.println(STR."接受到的值\{accept}"); + } + } + } + + private static void m1() throws IOException { + // 使用 ByteBuffer + ByteBuffer buffer = ByteBuffer.allocate(16); + // 创建服务器 + ServerSocketChannel serverSocketChannel = ServerSocketChannel.open(); + serverSocketChannel.configureBlocking(false); + // 模拟监听端口 + serverSocketChannel.bind(new InetSocketAddress(8080)); + // 连接集合 + ArrayList channels = new ArrayList<>(); + while (true) { + SocketChannel accept = serverSocketChannel.accept(); + if (accept != null) { + accept.configureBlocking(false); + channels.add(accept); + } + for (SocketChannel channel : channels) { + int read = channel.read(buffer); + // 当read大于0时才去读 + if (read > 0) { + buffer.flip(); + System.out.println((STR."读取到的内容:\{StandardCharsets.UTF_8.decode(buffer)}")); + buffer.clear(); + } + } + } + } +} diff --git a/demo1/target/classes/cn/bunny/file_dir/ClientDemo.class b/demo1/target/classes/cn/bunny/file_dir/ClientDemo.class new file mode 100644 index 0000000..de29d12 Binary files /dev/null and b/demo1/target/classes/cn/bunny/file_dir/ClientDemo.class differ diff --git a/demo1/target/classes/cn/bunny/Demo01.class b/demo1/target/classes/cn/bunny/file_dir/Demo01.class similarity index 87% rename from demo1/target/classes/cn/bunny/Demo01.class rename to demo1/target/classes/cn/bunny/file_dir/Demo01.class index 89b298f..de57af0 100644 Binary files a/demo1/target/classes/cn/bunny/Demo01.class and b/demo1/target/classes/cn/bunny/file_dir/Demo01.class differ diff --git a/demo1/target/classes/cn/bunny/Demo02.class b/demo1/target/classes/cn/bunny/file_dir/Demo02.class similarity index 58% rename from demo1/target/classes/cn/bunny/Demo02.class rename to demo1/target/classes/cn/bunny/file_dir/Demo02.class index 767b881..b3b4e46 100644 Binary files a/demo1/target/classes/cn/bunny/Demo02.class and b/demo1/target/classes/cn/bunny/file_dir/Demo02.class differ diff --git a/demo1/target/classes/cn/bunny/Demo10$1.class b/demo1/target/classes/cn/bunny/file_dir/Demo10$1.class similarity index 67% rename from demo1/target/classes/cn/bunny/Demo10$1.class rename to demo1/target/classes/cn/bunny/file_dir/Demo10$1.class index cf91f41..d32aaaf 100644 Binary files a/demo1/target/classes/cn/bunny/Demo10$1.class and b/demo1/target/classes/cn/bunny/file_dir/Demo10$1.class differ diff --git a/demo1/target/classes/cn/bunny/Demo10$2.class b/demo1/target/classes/cn/bunny/file_dir/Demo10$2.class similarity index 71% rename from demo1/target/classes/cn/bunny/Demo10$2.class rename to demo1/target/classes/cn/bunny/file_dir/Demo10$2.class index bc71560..418b61e 100644 Binary files a/demo1/target/classes/cn/bunny/Demo10$2.class and b/demo1/target/classes/cn/bunny/file_dir/Demo10$2.class differ diff --git a/demo1/target/classes/cn/bunny/Demo10$3.class b/demo1/target/classes/cn/bunny/file_dir/Demo10$3.class similarity index 80% rename from demo1/target/classes/cn/bunny/Demo10$3.class rename to demo1/target/classes/cn/bunny/file_dir/Demo10$3.class index 747a2b8..696a4c6 100644 Binary files a/demo1/target/classes/cn/bunny/Demo10$3.class and b/demo1/target/classes/cn/bunny/file_dir/Demo10$3.class differ diff --git a/demo1/target/classes/cn/bunny/Demo10.class b/demo1/target/classes/cn/bunny/file_dir/Demo10.class similarity index 88% rename from demo1/target/classes/cn/bunny/Demo10.class rename to demo1/target/classes/cn/bunny/file_dir/Demo10.class index 1b21cdf..59021bb 100644 Binary files a/demo1/target/classes/cn/bunny/Demo10.class and b/demo1/target/classes/cn/bunny/file_dir/Demo10.class differ diff --git a/demo1/target/classes/cn/bunny/Demo3.class b/demo1/target/classes/cn/bunny/file_dir/Demo3.class similarity index 65% rename from demo1/target/classes/cn/bunny/Demo3.class rename to demo1/target/classes/cn/bunny/file_dir/Demo3.class index 617938d..dfb4991 100644 Binary files a/demo1/target/classes/cn/bunny/Demo3.class and b/demo1/target/classes/cn/bunny/file_dir/Demo3.class differ diff --git a/demo1/target/classes/cn/bunny/Demo4.class b/demo1/target/classes/cn/bunny/file_dir/Demo4.class similarity index 63% rename from demo1/target/classes/cn/bunny/Demo4.class rename to demo1/target/classes/cn/bunny/file_dir/Demo4.class index fcb0137..a0aa132 100644 Binary files a/demo1/target/classes/cn/bunny/Demo4.class and b/demo1/target/classes/cn/bunny/file_dir/Demo4.class differ diff --git a/demo1/target/classes/cn/bunny/Demo5.class b/demo1/target/classes/cn/bunny/file_dir/Demo5.class similarity index 74% rename from demo1/target/classes/cn/bunny/Demo5.class rename to demo1/target/classes/cn/bunny/file_dir/Demo5.class index e19a277..7e89fda 100644 Binary files a/demo1/target/classes/cn/bunny/Demo5.class and b/demo1/target/classes/cn/bunny/file_dir/Demo5.class differ diff --git a/demo1/target/classes/cn/bunny/Demo6.class b/demo1/target/classes/cn/bunny/file_dir/Demo6.class similarity index 73% rename from demo1/target/classes/cn/bunny/Demo6.class rename to demo1/target/classes/cn/bunny/file_dir/Demo6.class index 1ca6837..fc09876 100644 Binary files a/demo1/target/classes/cn/bunny/Demo6.class and b/demo1/target/classes/cn/bunny/file_dir/Demo6.class differ diff --git a/demo1/target/classes/cn/bunny/Demo7.class b/demo1/target/classes/cn/bunny/file_dir/Demo7.class similarity index 75% rename from demo1/target/classes/cn/bunny/Demo7.class rename to demo1/target/classes/cn/bunny/file_dir/Demo7.class index cffe49b..44fdd20 100644 Binary files a/demo1/target/classes/cn/bunny/Demo7.class and b/demo1/target/classes/cn/bunny/file_dir/Demo7.class differ diff --git a/demo1/target/classes/cn/bunny/Demo8.class b/demo1/target/classes/cn/bunny/file_dir/Demo8.class similarity index 71% rename from demo1/target/classes/cn/bunny/Demo8.class rename to demo1/target/classes/cn/bunny/file_dir/Demo8.class index b67d174..81d4f5c 100644 Binary files a/demo1/target/classes/cn/bunny/Demo8.class and b/demo1/target/classes/cn/bunny/file_dir/Demo8.class differ diff --git a/demo1/target/classes/cn/bunny/Demo9.class b/demo1/target/classes/cn/bunny/file_dir/Demo9.class similarity index 81% rename from demo1/target/classes/cn/bunny/Demo9.class rename to demo1/target/classes/cn/bunny/file_dir/Demo9.class index 77204d5..b00bde3 100644 Binary files a/demo1/target/classes/cn/bunny/Demo9.class and b/demo1/target/classes/cn/bunny/file_dir/Demo9.class differ diff --git a/demo1/target/classes/cn/bunny/file_dir/Server2Demo.class b/demo1/target/classes/cn/bunny/file_dir/Server2Demo.class new file mode 100644 index 0000000..6aa0e73 Binary files /dev/null and b/demo1/target/classes/cn/bunny/file_dir/Server2Demo.class differ diff --git a/demo1/target/classes/cn/bunny/file_dir/ServerDemo.class b/demo1/target/classes/cn/bunny/file_dir/ServerDemo.class new file mode 100644 index 0000000..72d5607 Binary files /dev/null and b/demo1/target/classes/cn/bunny/file_dir/ServerDemo.class differ