import javax.swing.*; import java.awt.event.*; import java.awt.*; import java.io.*; import java.net.*; import java.util.*; public class Server extends JFrame{ JTextArea textArea = null; LinkedList list = null; ServerSocket server = null; final int PORT = 2000; public Server(){ super(); textArea = new JTextArea(); textArea.setEditable(false); getContentPane().add(new JScrollPane(textArea), BorderLayout.CENTER); addWindowListener(new CloseListener()); setSize(500, 200); show(); startServer(); } public void startServer(){ list = new LinkedList(); updateTitle(); try{ server = new ServerSocket(PORT,5); while (true){ Socket connection = server.accept(); broadCast("CLIENT CONNECTED: " + connection.getInetAddress().getHostName(), connection.getInetAddress().getHostName()); ClientHandler handler = new ClientHandler(connection, this); handler.start(); list.add(handler); updateTitle(); } }catch(IOException ioe){ } } public synchronized void broadCast(String msg, String sender){ Iterator iter = list.iterator(); while (iter.hasNext()){ ((ClientHandler)iter.next()).sendMsgToClient(msg); } textArea.append("CLIENT: " + sender + " BROADCAST: " + msg + "\n"); textArea.setCaretPosition(textArea.getText().length()); } public void updateTitle(){ try{ setTitle("SERVER ON: " + InetAddress.getLocalHost().getHostName() + " - PORT: " + PORT + " - CLIENTS: " + list.size()); }catch(UnknownHostException uhe){ } } public class CloseListener extends WindowAdapter{ public void windowClosing(WindowEvent e){ try{ server.close(); }catch(IOException ioe){ } System.exit(0); } } public static void main (String[] args) throws Exception{ new Server(); } }