public class SelectorServiceDemo {
public static void main(String[] args) throws IOException {
int port = 8000;
Selector selector = Selector.open();
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
serverSocketChannel.configureBlocking(false);
ServerSocket serverSocket = serverSocketChannel.socket();
InetSocketAddress address = new InetSocketAddress(port);
serverSocket.bind(address);
serverSocketChannel.register(selector,SelectionKey.OP_ACCEPT);
System.out.println("服务器,端口:"+port);
ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
while (true){
if ((selector.select())>0){
Set<SelectionKey>selectionKeys = selector.selectedKeys();
Iterator<SelectionKey>iter = selectionKeys.iterator();
while (iter.hasNext()){
SelectionKey key = iter.next();
if (key.isAcceptable()){
acceptable(selector,byteBuffer,key);
}else if (key.isReadable()&& key.isValid()){
reabable(selector,byteBuffer,key);
}else if (key.isWritable() && key.isValid()){
writable(selector,byteBuffer,key);
}
}
//清除全部的key
selectionKeys.clear();
}
}
}
private static void writable(Selector selector, ByteBuffer byteBuffer, SelectionKey key) throws IOException {
SocketChannel client = (SocketChannel) key.channel();
byteBuffer.clear();
// 向缓冲区中设置内存
byteBuffer.put(("欢迎进入NIO学习").getBytes());
byteBuffer.flip();
// 输入内容
client.write(byteBuffer);
client.register(selector,SelectionKey.OP_READ);
}
private static void reabable(Selector selector, ByteBuffer byteBuffer, SelectionKey key) throws IOException {
SocketChannel client = (SocketChannel) key.channel();
byteBuffer.clear();
//读取内容到缓冲区
int readSiza = client.read(byteBuffer);
if (readSiza >0){
System.out.println("服务器接受客服端数据"+new String(byteBuffer.array(),0,readSiza));
client.register(selector,SelectionKey.OP_WRITE);
}
}
private static void acceptable(Selector selector, ByteBuffer byteBuffer, SelectionKey key) throws IOException {
ServerSocketChannel server = (ServerSocketChannel) key.channel();
SocketChannel client = server.accept();
client.write(byteBuffer);;
client.register(selector,SelectionKey.OP_READ);
}
}
服务端 (代码Java)
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 参考官方github代码例子:https://github.com/grpc/grpc-java/tree/mas...
- 让java变成脚本语言 - Ken-专注后端技术 - ITeye技术网站http://janeky.iteye.c...
- 最近折腾了一下文件上传的方法,网上虽然有不少封装好的,但是基于RxJava2+Retrofit 带上传进度的还没有...