Advertisement
Guest User

Untitled

a guest
Jan 31st, 2013
368
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.53 KB | None | 0 0
  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. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement