首页 > 代码库 > Java新IO】_Selector
Java新IO】_Selector
DateServer.java
import java.net.InetSocketAddress ;
import java.net.ServerSocket ;
import java.util.Set ;
import java.util.Iterator ;
import java.util.Date ;
import java.nio.channels.ServerSocketChannel ;
import java.nio.ByteBuffer ;
import java.nio.channels.SocketChannel ;
import java.nio.channels.Selector ;
import java.nio.channels.SelectionKey ;
public class DateServer{
public static void main(String args[]) throws Exception {
int ports[] = {8000,8001,8002,8003,8005,8006} ; // 表示五个监听端口
Selector selector = Selector.open() ; // 通过open()方法找到Selector
for(int i=0;i<ports.length;i++){
ServerSocketChannel initSer = null ;
initSer = ServerSocketChannel.open() ; // 打开服务器的通道
initSer.configureBlocking(false) ; // 服务器配置为非阻塞
ServerSocket initSock = initSer.socket() ;
InetSocketAddress address = null ;
address = new InetSocketAddress(ports[i]) ; // 实例化绑定地址
initSock.bind(address) ; // 进行服务的绑定
initSer.register(selector,SelectionKey.OP_ACCEPT) ; // 等待连接
System.out.println("服务器运行,在" + ports[i] + "端口监听。") ;
}
// 要接收全部生成的key,并通过连接进行判断是否获取客户端的输出
int keysAdd = 0 ;
while((keysAdd=selector.select())>0){ // 选择一组键,并且相应的通道已经准备就绪
Set<SelectionKey> selectedKeys = selector.selectedKeys() ;// 取出全部生成的key
Iterator<SelectionKey> iter = selectedKeys.iterator() ;
while(iter.hasNext()){
SelectionKey key = iter.next() ; // 取出每一个key
if(key.isAcceptable()){
ServerSocketChannel server = (ServerSocketChannel)key.channel() ;
SocketChannel client = server.accept() ; // 接收新连接
client.configureBlocking(false) ;// 配置为非阻塞
ByteBuffer outBuf = ByteBuffer.allocateDirect(1024) ; //
outBuf.put(("当前的时间为:" + new Date()).getBytes()) ; // 向缓冲区中设置内容
outBuf.flip() ;
client.write(outBuf) ; // 输出内容
client.close() ; // 关闭
}
}
selectedKeys.clear() ; // 清楚全部的key
}
}
}
import java.net.ServerSocket ;
import java.util.Set ;
import java.util.Iterator ;
import java.util.Date ;
import java.nio.channels.ServerSocketChannel ;
import java.nio.ByteBuffer ;
import java.nio.channels.SocketChannel ;
import java.nio.channels.Selector ;
import java.nio.channels.SelectionKey ;
public class DateServer{
public static void main(String args[]) throws Exception {
int ports[] = {8000,8001,8002,8003,8005,8006} ; // 表示五个监听端口
Selector selector = Selector.open() ; // 通过open()方法找到Selector
for(int i=0;i<ports.length;i++){
ServerSocketChannel initSer = null ;
initSer = ServerSocketChannel.open() ; // 打开服务器的通道
initSer.configureBlocking(false) ; // 服务器配置为非阻塞
ServerSocket initSock = initSer.socket() ;
InetSocketAddress address = null ;
address = new InetSocketAddress(ports[i]) ; // 实例化绑定地址
initSock.bind(address) ; // 进行服务的绑定
initSer.register(selector,SelectionKey.OP_ACCEPT) ; // 等待连接
System.out.println("服务器运行,在" + ports[i] + "端口监听。") ;
}
// 要接收全部生成的key,并通过连接进行判断是否获取客户端的输出
int keysAdd = 0 ;
while((keysAdd=selector.select())>0){ // 选择一组键,并且相应的通道已经准备就绪
Set<SelectionKey> selectedKeys = selector.selectedKeys() ;// 取出全部生成的key
Iterator<SelectionKey> iter = selectedKeys.iterator() ;
while(iter.hasNext()){
SelectionKey key = iter.next() ; // 取出每一个key
if(key.isAcceptable()){
ServerSocketChannel server = (ServerSocketChannel)key.channel() ;
SocketChannel client = server.accept() ; // 接收新连接
client.configureBlocking(false) ;// 配置为非阻塞
ByteBuffer outBuf = ByteBuffer.allocateDirect(1024) ; //
outBuf.put(("当前的时间为:" + new Date()).getBytes()) ; // 向缓冲区中设置内容
outBuf.flip() ;
client.write(outBuf) ; // 输出内容
client.close() ; // 关闭
}
}
selectedKeys.clear() ; // 清楚全部的key
}
}
}
Java新IO】_Selector
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。