/* * SampleServer.java */ /** * * @author Peter Sutton */ import java.io.*; import java.net.*; import java.util.Vector; import java.util.ListIterator; public class SampleServer { private Vector clientList; class ClientThread extends Thread { private SampleServer server; private Socket socket; private PrintWriter out; private BufferedReader in; public ClientThread(SampleServer server, Socket socket) throws IOException { this.server = server; this.socket = socket; out = new PrintWriter(socket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader( socket.getInputStream())); } public void run() { try { /* Now receive lines and turn them into uppercase and send ** them back */ String line; while((line = in.readLine()) != null) { line = line.toUpperCase(); out.println(line); } close(); } catch (SocketException e) { close(); } catch (IOException e) { e.printStackTrace(); } } public void close() { try { System.err.println("Disconnection."); out.close(); in.close(); socket.close(); server.disconnected(this); } catch (IOException e) { e.printStackTrace(); } } } public SampleServer() { clientList = new Vector(); } public static void main(String[] args) { // An argument is expected - a port number to listen on - check for it if(args.length != 1) { System.err.println("Expected port number on command line"); System.exit(1); } SampleServer chatServer = new SampleServer(); int port = Integer.parseInt(args[0]); ServerSocket serverSocket = null; // Wait for connections try { serverSocket = new ServerSocket(port); System.err.println("Listening on port " + port); while(true) { // Wait for a connection to come in Socket connectionSocket = serverSocket.accept(); // Start a new thread to deal with it chatServer.addClient(connectionSocket); } } catch (IOException e) { e.printStackTrace(); } } public int numClients() { return clientList.size(); } public void addClient(Socket connectionSocket) throws IOException { ClientThread clientThread = new ClientThread(this, connectionSocket); clientList.add(clientThread); clientThread.start(); } public void disconnected(ClientThread gone) { clientList.remove(gone); } }