//: c15:MultiJabberServer.java // From 'Thinking in Java, 2nd ed.' by Bruce Eckel // www.BruceEckel.com. See copyright notice in CopyRight.txt. // A server that uses multithreading // to handle any number of clients. // // import java.io.*; import java.net.*; import javax.swing.*; import java.awt.event.*; import java.awt.*; import java.util.*; import com.bruceeckel.swing.*; import com.bruceeckel.util.*; public class MultiJabberServer extends JApplet { JTextArea Xout = new JTextArea(20, 50); int PORT = 8080; public void init() { Container cp = getContentPane(); cp.setLayout(new FlowLayout()); cp.add(new JLabel("MultiJabberServer!")); cp.add(new JScrollPane(Xout)); Xout.append("Welcome to MultiJabberServer \n"); try{ new mainJabber(); }catch(IOException ioe) {} } class ServeOneJabber extends Thread { private Socket socket; private BufferedReader in; private PrintWriter out; public ServeOneJabber(Socket s) throws IOException { socket = s; in = new BufferedReader( new InputStreamReader( socket.getInputStream())); // Enable auto-flush: out = new PrintWriter( new BufferedWriter( new OutputStreamWriter( socket.getOutputStream())), true); start(); // Calls run() } public void run() { try { //try1 while (true) { String str = in.readLine(); if (str.equals("END")) break; Xout.append("Echoing: " + str + "\n"); out.println(str); } Xout.append("closing...\n"); } catch(IOException e) { System.err.println("IO Exception"); } finally { try { socket.close(); } catch(IOException e) { System.err.println("Socket not closed"); } } // try1 }//run }// class ServeOneJabber class mainJabber extends Thread { ServerSocket s ; Socket socket; public mainJabber() throws IOException { s = new ServerSocket(PORT); Xout.append("Server Started\n"); start(); } public void run() { try { while(true) { // Blocks until a connection occurs: try{ socket = s.accept(); }catch(IOException ioe){} try { new ServeOneJabber(socket); } catch(IOException e) { try{ socket.close(); }catch(IOException ioe){} } }//while } finally { try{ s.close(); }catch(IOException ioe){} } } }//class mainJabber public static void main(String[] args) { Console.run(new MultiJabberServer(), 600, 400); } } ///:~