Server:
package com.tony.app;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.nio.ByteBuffer;
import java.nio.channels.SelectableChannel;
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;
/**
* 服务器
*
* @author TONY
*
*/
public class Server {
// 缓冲区的大小
private final static int BUFFER_SIZE = 1024;
// 缓冲区
private ByteBuffer buffer = ByteBuffer.allocate(BUFFER_SIZE);
// Server监听的端口号
// private final static int PORT = 8888;
// 选择器
private Selector selector = null;
// 初始化工作
public void init(int port) throws IOException {
System.out.println("============ Listening On Port : " + port + "============");
// 打开服务器套接字通道
ServerSocketChannel serverSocketChannel = ServerSocketChannel.open();
// 设置为非阻塞状态
serverSocketChannel.configureBlocking(false);
// 获取通道相关联的套接字
ServerSocket serverSocket = serverSocketChannel.socket();
// 绑定端口号
serverSocket.bind(new InetSocketAddress(port));
// 打开一个选择器
selector = Selector.open();
// 服务器套接字注册到Selector中 并指定Selector监控连接事件
serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
}
public void listen() throws IOException {
while (true) {
// 开启选择
int readyChannels = selector.select(); // 没有通道就绪 一直