Advertisement
joxaren

ShittyChat Client + Server

Dec 15th, 2017
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.31 KB | None | 0 0
  1. import javax.swing.*;
  2. import java.awt.*;
  3. import java.awt.event.ActionEvent;
  4. import java.awt.event.ActionListener;
  5. import java.io.*;
  6. import java.net.ConnectException;
  7. import java.net.Socket;
  8.  
  9. public class ShittyChatClient {
  10.  
  11.     private JFrame frame;
  12.     private JTextField inputField;
  13.     private JTextArea textArea;
  14.     private BufferedReader reader;
  15.     private PrintWriter writer;
  16.     private Socket sock;
  17.  
  18.     public static void main(String[] args) {
  19.         ShittyChatClient chat = new ShittyChatClient();
  20.         chat.getToWork();
  21.     }
  22.  
  23.     private void getToWork() {
  24.         frame = new JFrame("Shitty Chat");
  25.         JPanel panel = new JPanel();
  26.         JPanel textPanel = new JPanel();
  27.         JButton sendButton = new JButton("send");
  28.         inputField = new JTextField(13);
  29.         textArea = new JTextArea(10, 20);
  30.         textArea.setLineWrap(true);
  31.         textArea.setEditable(false);
  32.  
  33.         JScrollPane scroller = new JScrollPane(textArea);
  34.         scroller.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
  35.         scroller.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
  36.  
  37.         inputField.addActionListener(new EnterActionListener());
  38.         sendButton.addActionListener(new SendButtonListener());
  39.  
  40.         panel.add(inputField);
  41.         panel.add(sendButton);
  42.         textPanel.add(scroller);
  43.  
  44.         JMenuBar menuBar = new JMenuBar();
  45.         JMenu fileMenu = new JMenu("File");
  46.         JMenuItem saveOption = new JMenuItem("Save log");
  47.         JMenuItem loadOption = new JMenuItem("Load log");
  48.         saveOption.addActionListener(new SaveOptionListener());
  49.         loadOption.addActionListener(new LoadOptionListener());
  50.         fileMenu.add(saveOption);
  51.         fileMenu.add(loadOption);
  52.         menuBar.add(fileMenu);
  53.  
  54.         frame.setJMenuBar(menuBar);
  55.         frame.getContentPane().add(panel, BorderLayout.SOUTH);
  56.         frame.getContentPane().add(textPanel, BorderLayout.NORTH);
  57.         frame.setSize(300, 250);
  58.         frame.setVisible(true);
  59.         frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  60.  
  61.         inputField.requestFocus();
  62.  
  63.         setUpNetworking();
  64.  
  65.         Thread readerThread = new Thread(new IncomingReader());
  66.         readerThread.start();
  67.     }
  68.  
  69.     private void setUpNetworking() {
  70.         try {
  71.             sock = new Socket("127.0.0.1", 5500);
  72.             InputStreamReader streamReader = new InputStreamReader(sock.getInputStream());
  73.             reader = new BufferedReader(streamReader);
  74.             writer = new PrintWriter(sock.getOutputStream());
  75.             System.out.println("networking established");
  76.         }
  77.         catch (ConnectException ex) {
  78.             System.out.println("server not responding");
  79.             try {
  80.                 Thread.sleep(5000);
  81.             }
  82.             catch (InterruptedException exception) {
  83.                 ex.printStackTrace();
  84.             }
  85.             System.out.println("establishing connection...");
  86.             setUpNetworking();
  87.         }
  88.         catch (IOException ex) {
  89.             ex.printStackTrace();
  90.         }
  91.     }
  92.  
  93.     private void saveFile(File file) {
  94.         try {
  95.             BufferedWriter buff = new BufferedWriter(new FileWriter(file, true));
  96.             textArea.write(buff); // saves content of textArea as plain text with line breaks and shit
  97.             buff.close();
  98.         } catch (IOException ex) {
  99.             System.out.println("couldn't save the log");
  100.             ex.printStackTrace();
  101.         }
  102.     }
  103.  
  104.     private void loadFileToTextArea() throws IOException {
  105.         try {
  106.             BufferedReader buff = new BufferedReader(new FileReader(chooseFile()));
  107.             String readLine;
  108.             while ((readLine = buff.readLine()) != null) {
  109.                 textArea.append(readLine + "\n");
  110.             }
  111.             buff.close();
  112.         } catch (FileNotFoundException ex) {
  113.             ex.printStackTrace();
  114.         }
  115.     }
  116.  
  117.     private File chooseFile() {
  118.         JFileChooser fileOpener = new JFileChooser();
  119.         File fileToLoad = null;
  120.         int ret = fileOpener.showOpenDialog(textArea);
  121.         if (ret == JFileChooser.APPROVE_OPTION) {
  122.             fileToLoad = fileOpener.getSelectedFile();
  123.         }
  124.         return fileToLoad;
  125.     }
  126.  
  127.     class SaveOptionListener implements ActionListener {
  128.         public void actionPerformed(ActionEvent event) {
  129.             JFileChooser saveFileDialogBox = new JFileChooser();
  130.             saveFileDialogBox.showSaveDialog(frame);
  131.             saveFile(saveFileDialogBox.getSelectedFile());
  132.         }
  133.     }
  134.  
  135.     class LoadOptionListener implements ActionListener {
  136.         public void actionPerformed(ActionEvent event) {
  137.             textArea.setText("");
  138.             try {
  139.                 loadFileToTextArea();
  140.             } catch (IOException ex) {
  141.                 ex.printStackTrace();
  142.             }
  143.         }
  144.     }
  145.  
  146.     class SendButtonListener implements ActionListener { // listens to enter button presses
  147.         public void actionPerformed(ActionEvent event) {
  148.             try {
  149.                 writer.println(inputField.getText()); // sends inputField's contents to server
  150.                 writer.flush();
  151.  
  152.             } catch (Exception ex) {
  153.                 ex.printStackTrace();
  154.             }
  155.             inputField.setText(""); // clear the inputField
  156.             inputField.requestFocus(); // put the cursor back in the inputField
  157.         }
  158.     }
  159.  
  160.     class EnterActionListener implements ActionListener { // listens to enter/return key presses
  161.         public void actionPerformed(ActionEvent event) {
  162.             try {
  163.                 writer.println(inputField.getText()); // sends inputField's contents to server
  164.                 writer.flush();
  165.  
  166.             }
  167.             catch (NullPointerException nullPointer) {
  168.                 textArea.append("connection lost" + "\n");
  169.             }
  170.             catch (Exception ex) {
  171.                 ex.printStackTrace();
  172.             }
  173.             inputField.setText(""); // clear the inputField
  174.             inputField.requestFocus(); // put the cursor back in the inputField
  175.         }
  176.     }
  177.  
  178.     class IncomingReader implements Runnable {
  179.         public void run () {
  180.             String message;
  181.             try {
  182.                 while ((message = reader.readLine()) != null) {
  183.                     System.out.println("message read: " + message);
  184.                     textArea.append(message + "\n");
  185.                 }
  186.             }
  187.             catch (IOException ex) {
  188.                 ex.printStackTrace();
  189.             }
  190.         }
  191.     }
  192. }
  193.  
  194. ___________________________________________________________
  195.  
  196. import java.io.BufferedReader;
  197. import java.io.IOException;
  198. import java.io.InputStreamReader;
  199. import java.io.PrintWriter;
  200. import java.net.ServerSocket;
  201. import java.net.Socket;
  202. import java.net.SocketException;
  203. import java.net.SocketTimeoutException;
  204. import java.util.ArrayList;
  205. import java.util.Iterator;
  206.  
  207. public class ShittyChatServer {
  208.  
  209.     private ArrayList clientOutputStreams;
  210.  
  211.     public static void main(String[] args) {
  212.         ShittyChatServer server = new ShittyChatServer();
  213.         server.go();
  214.     }
  215.  
  216.     private void go() {
  217.         clientOutputStreams = new ArrayList();
  218.         try {
  219.             ServerSocket serverSock = new ServerSocket(5500);
  220.             System.out.println("server online");
  221.             while (true) {
  222.                 Socket clientSocket = serverSock.accept();
  223.                 System.out.println("got connection request");
  224.                 PrintWriter writer = new PrintWriter(clientSocket.getOutputStream());
  225.                 clientOutputStreams.add(writer);
  226.                 Thread t = new Thread(new ShittyChatServer.ClientHandler(clientSocket));
  227.                 t.start();
  228.             }
  229.  
  230.         } catch (Exception ex) {
  231.             ex.printStackTrace();
  232.         }
  233.     }
  234.  
  235.     private void tellEveryone(String message) {
  236.         Iterator it = clientOutputStreams.iterator();
  237.         while (it.hasNext()) {
  238.             try {
  239.                 PrintWriter writer = (PrintWriter) it.next();
  240.                 writer.println(message);
  241.                 writer.flush();
  242.             } catch (Exception ex) {
  243.                 ex.printStackTrace();
  244.             }
  245.         }
  246.     }
  247.  
  248.     public class ClientHandler implements Runnable {
  249.         BufferedReader reader;
  250.         Socket sock;
  251.  
  252.         ClientHandler(Socket clientSocket) {
  253.             try {
  254.                 sock = clientSocket;
  255.                 InputStreamReader isReader = new InputStreamReader(sock.getInputStream());
  256.                 reader = new BufferedReader(isReader);
  257.  
  258.             } catch (Exception ex) {
  259.                 ex.printStackTrace();
  260.             }
  261.         }
  262.  
  263.         public void run() {
  264.             String message;
  265.             try {
  266.                 while ((message = reader.readLine()) != null) {
  267.                     System.out.println("message: " + message);
  268.                     tellEveryone(message);
  269.                 }
  270.             } catch (SocketException ex) {
  271.                 System.out.println("client disconnected");
  272.             } catch (SocketTimeoutException ex) {
  273.                 System.out.println("connection timeout");
  274.             } catch (IOException ex) {
  275.                 ex.printStackTrace();
  276.             }
  277.         }
  278.     }
  279. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement