Pastebin launched a little side project called VERYVIRAL.com, check it out ;-) Want more features on Pastebin? Sign Up, it's FREE!
Guest

Untitled

By: a guest on Jan 31st, 2013  |  syntax: Java  |  size: 7.53 KB  |  views: 85  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. package test1;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.GridLayout;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7. import java.awt.event.WindowEvent;
  8. import java.awt.event.WindowListener;
  9. import java.io.IOException;
  10. import java.io.ObjectInputStream;
  11. import java.io.ObjectOutputStream;
  12. import java.net.InetAddress;
  13. import java.net.ServerSocket;
  14. import java.net.Socket;
  15. import java.util.ArrayList;
  16.  
  17. import javax.swing.BorderFactory;
  18. import javax.swing.DefaultListModel;
  19. import javax.swing.JButton;
  20. import javax.swing.JFrame;
  21. import javax.swing.JLabel;
  22. import javax.swing.JList;
  23. import javax.swing.JOptionPane;
  24. import javax.swing.JPanel;
  25. import javax.swing.JScrollPane;
  26. import javax.swing.UIManager;
  27. import javax.swing.event.ListSelectionEvent;
  28. import javax.swing.event.ListSelectionListener;
  29.  
  30. /**
  31.  *
  32.  * @author Vallentin <vallentinsource@gmail.com>
  33.  * @since April 8, 2012
  34.  *
  35.  */
  36.  
  37. public class Server
  38. {
  39.         public static int port = 2406;
  40.         public static String ip = "";
  41.        
  42.         public static ServerSocket server;
  43.        
  44.         public static ArrayList<Socket> list_sockets = new ArrayList<Socket>();
  45.         public static ArrayList<Integer> list_client_states = new ArrayList<Integer>();
  46.         public static ArrayList<DataPackage> list_data = new ArrayList<DataPackage>();
  47.        
  48.        
  49.        
  50.         private static Runnable accept = new Runnable()
  51.         {
  52.                 @Override
  53.                 public void run()
  54.                 {
  55.                         new Thread(send).start();
  56.                         new Thread(receive).start();
  57.                        
  58.                         while (true)
  59.                         {
  60.                                
  61.                                 try
  62.                                 {
  63.                                         Socket socket = server.accept();
  64.                                        
  65.                                         ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
  66.                                        
  67.                                         String username = (String) ois.readObject();
  68.                                        
  69.                                         boolean accepted = true;
  70.                                        
  71.                                         for (int i = 0; i < list_data.size(); i++)
  72.                                         {
  73.                                                 if (list_data.get(i).username.toLowerCase().equals(username.toLowerCase()))
  74.                                                 {
  75.                                                         accepted = false;
  76.                                                         break;
  77.                                                 }
  78.                                         }
  79.                                        
  80.                                         ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
  81.                                        
  82.                                         if (accepted)
  83.                                         {
  84.                                                 oos.writeObject("Welcome To This Server...");
  85.                                                
  86.                                                 list_clients_model.addElement(username + " - " + socket.getInetAddress().getHostAddress() + " - " + socket.getInetAddress().getHostName());
  87.                                                 list_client_states.add(0);
  88.                                                
  89.                                                 list_data.add(new DataPackage());
  90.                                                 list_sockets.add(socket);
  91.                                         }
  92.                                         else
  93.                                         {
  94.                                                 oos.writeObject("Your name is already taken!");
  95.                                         }
  96.                                 }
  97.                                 catch (Exception ex) {}
  98.                         }
  99.                 }
  100.         };
  101.        
  102.         private static Runnable send = new Runnable()
  103.         {
  104.                 @Override
  105.                 public void run()
  106.                 {
  107.                         ObjectOutputStream oos;
  108.                        
  109.                         while (true)
  110.                         {
  111.                                 for (int i = 0; i < list_sockets.size(); i++)
  112.                                 {
  113.                                         try
  114.                                         {
  115.                                                 oos = new ObjectOutputStream(list_sockets.get(i).getOutputStream());
  116.                                                 int client_state = list_client_states.get(i);
  117.                                                 oos.writeObject(client_state);
  118.                                                
  119.                                                 oos = new ObjectOutputStream(list_sockets.get(i).getOutputStream());
  120.                                                 oos.writeObject(list_data);
  121.                                                
  122.                                                 if (client_state == 1) // Kicked by Server
  123.                                                 {
  124.                                                         disconnectClient(i);
  125.                                                         i--;
  126.                                                 }
  127.                                                 else if (client_state == 2) // Server Disconnected
  128.                                                 {
  129.                                                         disconnectClient(i);
  130.                                                         i--;
  131.                                                 }
  132.                                         }
  133.                                         catch (Exception ex) {disconnectClient(i);}
  134.                                 }
  135.                         }
  136.                 }
  137.         };
  138.        
  139.         private static Runnable receive = new Runnable()
  140.         {
  141.                 @Override
  142.                 public void run()
  143.                 {
  144.                         ObjectInputStream ois;
  145.                        
  146.                         while (true)
  147.                         {
  148.                                 for (int i = 0; i < list_sockets.size(); i++)
  149.                                 {
  150.                                         try
  151.                                         {
  152.                                                 ois = new ObjectInputStream(list_sockets.get(i).getInputStream());
  153.                                                 int receive_state = (Integer) ois.readObject();
  154.                                                
  155.                                                 ois = new ObjectInputStream(list_sockets.get(i).getInputStream());
  156.                                                 DataPackage dp = (DataPackage) ois.readObject();
  157.                                                
  158.                                                 list_data.set(i, dp);
  159.                                                
  160.                                                 if (receive_state == 1) // Client Disconnected by User
  161.                                                 {
  162.                                                         disconnectClient(i);
  163.                                                         i--;
  164.                                                 }
  165.                                         }
  166.                                         catch (Exception ex) // Client Disconnected (Client Didn't Notify Server About Disconnecting)
  167.                                         {
  168.                                                 disconnectClient(i);
  169.                                                 i--;
  170.                                         }
  171.                                 }
  172.                         }
  173.                 }
  174.         };
  175.        
  176.         public static void disconnectClient(int index)
  177.         {
  178.                 try
  179.                 {
  180.                         list_clients_model.removeElementAt(index);
  181.                         list_client_states.remove(index);
  182.                         list_data.remove(index);
  183.                         list_sockets.remove(index);
  184.                 }
  185.                 catch (Exception ex) {}
  186.         }
  187.        
  188.        
  189.        
  190.         public static JFrame frame;
  191.        
  192.         public static JPanel content;
  193.         public static JPanel panel1;
  194.         public static JPanel panel2;
  195.         public static JPanel panel3;
  196.        
  197.         public static JButton btn_disconnect;
  198.        
  199.         public static JList list_clients;
  200.         public static DefaultListModel list_clients_model;
  201.        
  202.        
  203.        
  204.         public static void main(String[] args)
  205.         {
  206.                 try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception ex) {}
  207.                
  208.                 try
  209.                 {
  210.                         ip = InetAddress.getLocalHost().getHostAddress() + ":" + port;
  211.                        
  212.                         server = new ServerSocket(port, 0, InetAddress.getLocalHost());
  213.                         new Thread(accept).start();
  214.                 }
  215.                 catch (IOException ex)
  216.                 {
  217.                         JOptionPane.showMessageDialog(null, "Error: " + ex.getMessage(), "Alert", JOptionPane.ERROR_MESSAGE);
  218.                         System.exit(0);
  219.                 }
  220.                
  221.                
  222.                
  223.                 btn_disconnect = new JButton();
  224.                 btn_disconnect.setText("Disconnect");
  225.                 btn_disconnect.addActionListener(new ActionListener()
  226.                 {
  227.                         @Override
  228.                         public void actionPerformed(ActionEvent e)
  229.                         {
  230.                                 int selected = list_clients.getSelectedIndex();
  231.                                
  232.                                 if (selected != -1)
  233.                                 {
  234.                                         try
  235.                                         {
  236.                                                 list_client_states.set(selected, 1);
  237.                                         }
  238.                                         catch (Exception ex)
  239.                                         {
  240.                                                 JOptionPane.showMessageDialog(null, "Error: " + ex.getMessage(), "Alert", JOptionPane.ERROR_MESSAGE);
  241.                                         }
  242.                                 }
  243.                         }
  244.                 });
  245.                
  246.                 list_clients_model = new DefaultListModel();
  247.                 list_clients = new JList(list_clients_model);
  248.                 list_clients.addListSelectionListener(new ListSelectionListener()
  249.                 {
  250.                         @Override
  251.                         public void valueChanged(ListSelectionEvent e)
  252.                         {
  253.                                 if (e.getValueIsAdjusting())
  254.                                 {
  255.                                         System.out.println(list_clients.getSelectedIndex());
  256.                                 }
  257.                         }
  258.                 });
  259.                
  260.                 frame = new JFrame();
  261.                 frame.setTitle("Server - " + ip);
  262.                
  263.                 frame.addWindowListener(new WindowListener()
  264.                 {
  265.                         public void windowActivated(WindowEvent e) {}
  266.                         public void windowClosed(WindowEvent e) {}
  267.                        
  268.                         @Override
  269.                         public void windowClosing(WindowEvent e)
  270.                         {
  271.                                 while (list_sockets.size() != 0)
  272.                                 {
  273.                                         try
  274.                                         {
  275.                                                 for (int i = 0; i < list_client_states.size(); i++)
  276.                                                 {
  277.                                                         list_client_states.set(i, 2);
  278.                                                 }
  279.                                         }
  280.                                         catch (Exception ex) {}
  281.                                 }
  282.                                
  283.                                 System.exit(0);
  284.                         }
  285.                        
  286.                         public void windowDeactivated(WindowEvent e) {}
  287.                         public void windowDeiconified(WindowEvent e) {}
  288.                         public void windowIconified(WindowEvent e) {}
  289.                         public void windowOpened(WindowEvent e) {}
  290.                 });
  291.                
  292.                 panel1 = new JPanel();
  293.                 panel1.setLayout(new GridLayout(1, 1, 1, 1));
  294.                 panel1.add(btn_disconnect);
  295.                
  296.                 panel2 = new JPanel();
  297.                 panel2.add(new JLabel(ip));
  298.                
  299.                 panel3 = new JPanel();
  300.                 panel3.setLayout(new BorderLayout(1, 1));
  301.                 panel3.add(panel1, BorderLayout.NORTH);
  302.                 panel3.add(new JScrollPane(list_clients), BorderLayout.CENTER);
  303.                 panel3.add(panel2, BorderLayout.SOUTH);
  304.                
  305.                 content = new JPanel();
  306.                 content.setLayout(new GridLayout(1, 1, 1, 1));
  307.                 content.add(panel3);
  308.                
  309.                 content.setBorder(BorderFactory.createEmptyBorder(10, 10, 10, 10));
  310.                
  311.                 frame.setContentPane(content);
  312.                 frame.pack();
  313.                 frame.setSize(350, 400);
  314.                 frame.setLocationRelativeTo(null);
  315.                 frame.setVisible(true);
  316.         }
  317. }