NewFingerServer.java Source code

Java tutorial

Introduction

Here is the source code for NewFingerServer.java

Source

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();
                }
            }
        }
    }
}