博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java nio
阅读量:6723 次
发布时间:2019-06-25

本文共 2381 字,大约阅读时间需要 7 分钟。

  hot3.png

package cn.zvc.nio;import java.io.IOException;import java.net.InetSocketAddress;import java.net.ServerSocket;import java.nio.ByteBuffer;import java.nio.channels.ClosedChannelException;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;import java.util.Iterator;import java.util.Set;public class NIOServer {	private int blockSize = 4096;	private ByteBuffer sendBuffer = ByteBuffer.allocate(blockSize);		private ByteBuffer receiveBuffer = ByteBuffer.allocate(blockSize);	private Selector selector;		private int flag = 1;	public NIOServer(int port) throws IOException {		ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();		//设置是否阻塞		serverSocketChannel.configureBlocking(false);		ServerSocket serverSocket = serverSocketChannel.socket();		serverSocket.bind(new InetSocketAddress(port));		selector = Selector.open();				serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);				System.out.println("server start:" + port);	}			public void linsten() throws IOException{		while(true) {			selector.select();			Set
 selectionKeys = selector.selectedKeys(); Iterator
 it = selectionKeys.iterator(); while(it.hasNext()) { SelectionKey sk = it.next(); it.remove(); //业务逻辑 handleKey(sk); } } } public void handleKey(SelectionKey sk) throws IOException{ ServerSocketChannel server = null; SocketChannel client = null; String reviceText; String sendText; int count = 0; if(sk.isAcceptable()){ server = (ServerSocketChannel) sk.channel(); client = server.accept(); client.configureBlocking(false); client.register(selector, sk.OP_READ); } else if(sk.isReadable()) { client = (SocketChannel) sk.channel(); count = client.read(receiveBuffer); if(count>0){ reviceText = new String(receiveBuffer.array(),0,count); System.out.println("服务端接受到客户端的信息:"+ reviceText); client.register(selector, SelectionKey.OP_WRITE); }  } else if(sk.isWritable()){ receiveBuffer.clear(); client = (SocketChannel) sk.channel(); sendText = "msg send to client:"+ flag; sendBuffer.put(sendText.getBytes()); sendBuffer.flip(); client.write(sendBuffer); System.out.println("服务端发送给客户端:"+ sendText); } } public static void main(String[] args) { }}

转载于:https://my.oschina.net/zvc/blog/631149

你可能感兴趣的文章
详解JavaScript模块化开发
查看>>
C之有符号与无符号(二)
查看>>
DOCKER网络代理设置
查看>>
javascript基础语法——变量和标识符
查看>>
Java静态变量、非静态变量、成员变量、的区别
查看>>
数据库中有外键时JavaBean的写法
查看>>
linux-sed
查看>>
16.4-16.8 Tomcat监听80端口,Tomcat的虚拟主机,访问日志
查看>>
app客户端测试
查看>>
nodejs渐入佳境[23]-hash函数
查看>>
Big Data Integration with Hadoop: A Q&A Spotlig...
查看>>
【062有新题】OCP 12c 062出现大量之前没有的新考题-16
查看>>
触手TV下载|触手TVapp下载
查看>>
PDF文件如何修改,PDF怎么添加文本高亮
查看>>
大链表数据去重的办法
查看>>
Awk使用案例总结(运维必会)
查看>>
卸载并清理gitlab
查看>>
Nginx 负载均生产环境下的衡配置
查看>>
关于流量计算
查看>>
python笔记-循环
查看>>