import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.channels.SelectionKey;
import java.nio.channels.Selector;
import java.nio.channels.ServerSocketChannel;
import java.util.Iterator;
import java.util.Set;
public class NewFingerServer {
private static void readPlan(String userName, PrintWriter pw) throws Exception {
FileReader file = new FileReader(userName + ".plan");
BufferedReader buff = new BufferedReader(file);
boolean eof = false;
pw.println("\nUser name: " + userName + "\n");
while (!eof) {
String line = buff.readLine();
if (line == null)
eof = true;
else
pw.println(line);
}
buff.close();
}
public static void main(String[] arguments) throws Exception {
ServerSocketChannel sockChannel = ServerSocketChannel.open();
sockChannel.configureBlocking(false);
InetSocketAddress server = new InetSocketAddress("localhost", 79);
ServerSocket socket = sockChannel.socket();
socket.bind(server);
Selector selector = Selector.open();
sockChannel.register(selector, SelectionKey.OP_ACCEPT);
while (true) {
selector.select();
Set keys = selector.selectedKeys();
Iterator it = keys.iterator();
while (it.hasNext()) {
SelectionKey selKey = (SelectionKey) it.next();
it.remove();
if (selKey.isAcceptable()) {
ServerSocketChannel selChannel = (ServerSocketChannel) selKey.channel();
ServerSocket selSocket = selChannel.socket();
Socket connection = selSocket.accept();
InputStreamReader isr = new InputStreamReader(connection.getInputStream());
BufferedReader is = new BufferedReader(isr);
PrintWriter pw = new PrintWriter(new BufferedOutputStream(connection.getOutputStream()), false);
pw.println("NIO Finger Server");
pw.flush();
String outLine = null;
String inLine = is.readLine();
if (inLine.length() > 0) {
outLine = inLine;
}
readPlan(outLine, pw);
pw.flush();
pw.close();
is.close();
connection.close();
}
}
}
}
}
|