multiserver.java


Below is the syntax highlighted version of multiserver.java from §8.4 Operating Systems.


// bwk

import java.net.*;
import java.io.*;

public class multiserver {
    public static void main(String[] args) {
        int port = 5194;
        if (args.length > 0)
            port = Integer.parseInt(args[0]);

        try {
            ServerSocket server = new ServerSocket(port);
            while (true) {
                Socket sock = server.accept();
                System.err.println("multiserver " + sock);
                new echo(sock);
            }
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
}



class echo extends Thread {
    Socket sock;

    echo(Socket sock) {
        this.sock = sock;
        start();
    }

    public void run() {
        try {
            BufferedReader in  = new BufferedReader(new InputStreamReader(sock.getInputStream()));
            BufferedWriter out = new BufferedWriter(new OutputStreamWriter(sock.getOutputStream()));
            String s;
            while ((s = in.readLine()) != null) {
                out.write(s);
                out.newLine();
                out.flush();
                System.err.println(sock.getInetAddress() + " " + s);
                if (s.equals("exit"))
                    break;
                if (s.equals("die!"))	// a way to kill the server
                    System.exit(0);
            }
            sock.close();
        }
        catch (IOException e) {
            System.err.println("server exception " + e);
        }
    }

}


Copyright © 2000–2017, Robert Sedgewick and Kevin Wayne.
Last updated: Fri Oct 20 14:12:12 EDT 2017.