server.java

来自「基于java nio实现的http服务器」· Java 代码 · 共 50 行

JAVA
50
字号
package org.sse.server;

import java.io.IOException;
import java.nio.channels.*;
import java.util.Iterator;

/**
 * @author Taylor Cowan
 */
public class Server {

	private int myPort;
	private Selector selector;
	private ServerEventHandler myHandler;

	public Server(int port, ServerEventHandler handler) throws IOException {
		myPort = port;
		myHandler = handler;
		selector = SelectorFactory.getSelector(myPort);
	}

	public void listen() {
		SelectionKey key = null;
		try {
			for (;;) {
				selector.select();
				Iterator it = selector.selectedKeys().iterator();
				while (it.hasNext()) {
					key = (SelectionKey) it.next();
					handleKey(key);
					it.remove();
				}
			}
		} catch (IOException e) {
			key.cancel();
		} catch (NullPointerException e) {
			// NullPointer at sun.nio.ch.WindowsSelectorImpl, Bug: 4729342
			e.printStackTrace();			
		}
	}

	private void handleKey(SelectionKey key)
		throws IOException {
		if (key.isAcceptable())
			myHandler.acceptNewClient(selector, key);
		else if (key.isReadable())
			myHandler.readDataFromSocket(key);
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?