Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class client_frame extends JFrame {
- String username, address = "localhost";
- ArrayList<String> users = new ArrayList();
- int port = 2222;
- Boolean isConnected = false;
- Socket sock;
- BufferedReader reader;
- PrintWriter writer;
- public void ListenThread() {
- Thread IncomingReader = new Thread(new IncomingReader());
- IncomingReader.start();
- }
- public void userAdd(String data) {
- users.add(data);
- }
- public void userRemove(String data){
- ta_chat.append(data + " is now offline.n");
- }
- public void writeUsers(){
- String[] tempList = new String[(users.size())];
- users.toArray(tempList);
- for (String token:tempList)
- {
- //users.append(token + "n");
- }
- }
- public void sendDisconnect() {
- String bye = (username + ": :Disconnect");
- try{
- writer.println(bye);
- writer.flush();
- } catch (Exception e) {
- ta_chat.append("Could not send Disconnect message.n");
- }
- }
- public void Disconnect() {
- try {
- ta_chat.append("Disconnected.n");
- sock.close();
- } catch(Exception ex) {
- ta_chat.append("Failed to disconnect. n");
- }
- isConnected = false;
- tf_username.setEditable(true);
- }
- public client_frame() {
- initComponents();
- }
- public class IncomingReader implements Runnable{
- public void run() {
- String[] data;
- String stream, done = "Done", connect = "Connect", disconnect = "Disconnect", chat = "Chat";
- try {
- while ((stream = reader.readLine()) != null) {
- data = stream.split(":");
- if (data[2].equals(chat)) {
- ta_chat.append(data[0] + ": " + data[1] + "n");
- ta_chat.setCaretPosition(ta_chat.getDocument().getLength());
- }
- else if (data[2].equals(connect)){
- ta_chat.removeAll();
- userAdd(data[0]);
- }
- else if (data[2].equals(disconnect)) {
- userRemove(data[0]);
- }
- else if (data[2].equals(done)) {
- //users.setText("");
- writeUsers();
- users.clear();
- }
- }
- }catch(Exception ex) { }
- }
- }
- @SuppressWarnings("unchecked")
- // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
- private void initComponents() {
- lb_address = new JLabel();
- tf_address = new JTextField();
- lb_port = new JLabel();
- tf_port = new JTextField();
- lb_username = new JLabel();
- tf_username = new JTextField();
- lb_password = new JLabel();
- tf_password = new JTextField();
- b_connect = new JButton();
- b_disconnect = new JButton();
- b_anonymous = new JButton();
- jScrollPane1 = new JScrollPane();
- ta_chat = new JTextArea();
- tf_chat = new JTextField();
- b_send = new JButton();
- lb_name = new JLabel();
- setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
- setTitle("Chat - Client's frame");
- setName("client"); // NOI18N
- setResizable(false);
- lb_address.setText("Address : ");
- tf_address.setText("localhost");
- tf_address.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- tf_addressActionPerformed(evt);
- }
- });
- lb_port.setText("Port :");
- tf_port.setText("2222");
- tf_port.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- tf_portActionPerformed(evt);
- }
- });
- lb_username.setText("Username :");
- tf_username.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- tf_usernameActionPerformed(evt);
- }
- });
- lb_password.setText("Password : ");
- b_connect.setText("Connect");
- b_connect.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- b_connectActionPerformed(evt);
- }
- });
- b_disconnect.setText("Disconnect");
- b_disconnect.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- b_disconnectActionPerformed(evt);
- }
- });
- b_anonymous.setText("Anonymous Login");
- b_anonymous.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- b_anonymousActionPerformed(evt);
- }
- });
- ta_chat.setColumns(20);
- ta_chat.setRows(5);
- jScrollPane1.setViewportView(ta_chat);
- b_send.setText("SEND");
- b_send.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- b_sendActionPerformed(evt);
- }});
- lb_name.setText("TechWorld3g");
- lb_name.setBorder(BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
- GroupLayout layout = new GroupLayout(getContentPane());
- getContentPane().setLayout(layout);
- layout.setHorizontalGroup(
- layout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addGroup(layout.createSequentialGroup()
- .addContainerGap()
- .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addGroup(layout.createSequentialGroup()
- .addComponent(tf_chat, GroupLayout.PREFERRED_SIZE, 352, GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(b_send, GroupLayout.DEFAULT_SIZE, 111, Short.MAX_VALUE))
- .addComponent(jScrollPane1)
- .addGroup(layout.createSequentialGroup()
- .addGroup(layout.createParallelGroup(GroupLayout.Alignment.TRAILING, false)
- .addComponent(lb_username, GroupLayout.DEFAULT_SIZE, 62, Short.MAX_VALUE)
- .addComponent(lb_address, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- .addGap(18, 18, 18)
- .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING, false)
- .addComponent(tf_address, GroupLayout.DEFAULT_SIZE, 89, Short.MAX_VALUE)
- .addComponent(tf_username))
- .addGap(18, 18, 18)
- .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING, false)
- .addComponent(lb_password, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(lb_port, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
- .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
- .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING, false)
- .addComponent(tf_password)
- .addComponent(tf_port, GroupLayout.DEFAULT_SIZE, 50, Short.MAX_VALUE))
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addGroup(layout.createSequentialGroup()
- .addComponent(b_connect)
- .addGap(2, 2, 2)
- .addComponent(b_disconnect)
- .addGap(0, 0, Short.MAX_VALUE))
- .addComponent(b_anonymous, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))))
- .addContainerGap())
- .addGroup(GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
- .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(lb_name)
- .addGap(201, 201, 201))
- );
- layout.setVerticalGroup(
- layout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addGroup(layout.createSequentialGroup()
- .addContainerGap()
- .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(lb_address)
- .addComponent(tf_address, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addComponent(lb_port)
- .addComponent(tf_port, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
- .addComponent(b_anonymous))
- .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
- .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING, false)
- .addComponent(tf_username)
- .addComponent(tf_password)
- .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(lb_username)
- .addComponent(lb_password)
- .addComponent(b_connect)
- .addComponent(b_disconnect)))
- .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
- .addComponent(jScrollPane1, GroupLayout.PREFERRED_SIZE, 310, GroupLayout.PREFERRED_SIZE)
- .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED)
- .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addComponent(tf_chat)
- .addComponent(b_send, GroupLayout.DEFAULT_SIZE, 31, Short.MAX_VALUE))
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
- .addComponent(lb_name))
- );
- pack();
- }// </editor-fold>//GEN-END:initComponents
- private void tf_addressActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tf_addressActionPerformed
- }//GEN-LAST:event_tf_addressActionPerformed
- private void tf_portActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tf_portActionPerformed
- }//GEN-LAST:event_tf_portActionPerformed
- private void tf_usernameActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tf_usernameActionPerformed
- }//GEN-LAST:event_tf_usernameActionPerformed
- private void b_connectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_b_connectActionPerformed
- if (isConnected == false)
- {
- username = tf_username.getText();
- tf_username.setEditable(false);
- try
- {
- sock = new Socket(address, port);
- InputStreamReader streamreader = new InputStreamReader(sock.getInputStream());
- reader = new BufferedReader(streamreader);
- writer = new PrintWriter(sock.getOutputStream());
- writer.println(username + ":has connected.:Connect");
- writer.flush();
- isConnected = true;
- }
- catch (Exception ex)
- {
- ta_chat.append("Cannot Connect! Try Again. n");
- tf_username.setEditable(true);
- }
- ListenThread();
- } else if (isConnected == true)
- {
- ta_chat.append("You are already connected. n");
- }
- }//GEN-LAST:event_b_connectActionPerformed
- private void b_disconnectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_b_disconnectActionPerformed
- sendDisconnect();
- Disconnect();
- }//GEN-LAST:event_b_disconnectActionPerformed
- private void b_anonymousActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_b_anonymousActionPerformed
- tf_username.setText("");
- if (isConnected == false) {
- String anon="anon";
- Random generator = new Random();
- int i = generator.nextInt(999) + 1;
- String is=String.valueOf(i);
- anon=anon.concat(is);
- username=anon;
- tf_username.setText(anon);
- tf_username.setEditable(false);
- try {
- sock = new Socket(address, port);
- InputStreamReader streamreader = new InputStreamReader(sock.getInputStream());
- reader = new BufferedReader(streamreader);
- writer = new PrintWriter(sock.getOutputStream());
- writer.println(anon + ":has connected.:Connect");
- writer.flush();
- isConnected = true;
- }
- catch (Exception ex){
- ta_chat.append("Cannot Connect! Try Again. n");
- tf_username.setEditable(true);
- }
- ListenThread();
- } else if (isConnected == true) {
- ta_chat.append("You are already connected. n");
- }
- }
- private void b_sendActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_b_sendActionPerformed
- String nothing = "";
- if ((tf_chat.getText()).equals(nothing)) {
- tf_chat.setText("");
- tf_chat.requestFocus();
- } else {
- try {
- writer.println(username + ":" + tf_chat.getText() + ":" + "Chat");
- writer.flush(); // flushes the buffer
- } catch (Exception ex) {
- ta_chat.append("Message was not sent. n");
- }
- tf_chat.setText("");
- tf_chat.requestFocus();
- }
- tf_chat.setText("");
- tf_chat.requestFocus();
- }
- public static void main(String args[]) {
- java.awt.EventQueue.invokeLater(new Runnable() {
- public void run() {
- new client_frame().setVisible(true);
- }
- });
- }
- private JButton b_anonymous;
- private JButton b_connect;
- private JButton b_disconnect;
- private JButton b_send;
- private JScrollPane jScrollPane1;
- private JLabel lb_address;
- private JLabel lb_name;
- private JLabel lb_password;
- private JLabel lb_port;
- private JLabel lb_username;
- private JTextArea ta_chat;
- private JTextField tf_address;
- private JTextField tf_chat;
- private JTextField tf_password;
- private JTextField tf_port;
- private JTextField tf_username;
- // End of variables declaration//GEN-END:variables
- }
- public class server_frame extends JFrame
- {
- ArrayList clientOutputStreams;
- ArrayList<String> users;
- public class ClientHandler implements Runnable
- {
- BufferedReader reader;
- Socket sock;
- PrintWriter client;
- public ClientHandler(Socket clientSocket, PrintWriter user)
- {
- client = user;
- try
- {
- sock = clientSocket;
- InputStreamReader isReader = new InputStreamReader(sock.getInputStream());
- reader = new BufferedReader(isReader);
- }
- catch (Exception ex)
- {
- ta_chat.append("Unexpected error... n");
- }
- }
- public void run() {
- String message, connect = "Connect", disconnect = "Disconnect", chat = "Chat" ;
- String[] data;
- try
- {
- while ((message = reader.readLine()) != null)
- {
- ta_chat.append("Received: " + message + "n");
- data = message.split(":");
- for (String token:data)
- {
- ta_chat.append(token + "n");
- }
- if (data[2].equals(connect))
- {
- tellEveryone((data[0] + ":" + data[1] + ":" + chat));
- userAdd(data[0]);
- }
- else if (data[2].equals(disconnect))
- {
- tellEveryone((data[0] + ":has disconnected." + ":" + chat));
- userRemove(data[0]);
- }
- else if (data[2].equals(chat))
- {
- tellEveryone(message);
- }
- else
- {
- ta_chat.append("No Conditions were met. n");
- }
- }
- }
- catch (Exception ex)
- {
- ta_chat.append("Lost a connection. n");
- ex.printStackTrace();
- clientOutputStreams.remove(client);
- }
- }
- }
- public server_frame()
- {
- initComponents();
- }
- @SuppressWarnings("unchecked")
- // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
- private void initComponents() {
- jScrollPane1 = new JScrollPane();
- ta_chat = new JTextArea();
- b_start = new JButton();
- b_end = new JButton();
- b_users = new JButton();
- b_clear = new JButton();
- lb_name = new JLabel();
- setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
- setTitle("Chat - Server's frame");
- setName("server"); // NOI18N
- setResizable(false);
- ta_chat.setColumns(20);
- ta_chat.setRows(5);
- jScrollPane1.setViewportView(ta_chat);
- b_start.setText("START");
- b_start.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- b_startActionPerformed(evt);
- }
- });
- b_end.setText("END");
- b_end.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- b_endActionPerformed(evt);
- }
- });
- b_users.setText("Online Users");
- b_users.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- b_usersActionPerformed(evt);
- }
- });
- b_clear.setText("Clear");
- b_clear.addActionListener(new java.awt.event.ActionListener() {
- public void actionPerformed(java.awt.event.ActionEvent evt) {
- b_clearActionPerformed(evt);
- }
- });
- lb_name.setText("TechWorld3g");
- lb_name.setBorder(BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
- GroupLayout layout = new GroupLayout(getContentPane());
- getContentPane().setLayout(layout);
- layout.setHorizontalGroup(
- layout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addGroup(layout.createSequentialGroup()
- .addContainerGap()
- .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addComponent(jScrollPane1)
- .addGroup(layout.createSequentialGroup()
- .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING, false)
- .addComponent(b_end, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(b_start, GroupLayout.DEFAULT_SIZE, 75, Short.MAX_VALUE))
- .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED, 291, Short.MAX_VALUE)
- .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING, false)
- .addComponent(b_clear, GroupLayout.DEFAULT_SIZE, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(b_users, GroupLayout.DEFAULT_SIZE, 103, Short.MAX_VALUE))))
- .addContainerGap())
- .addGroup(GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
- .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
- .addComponent(lb_name)
- .addGap(209, 209, 209))
- );
- layout.setVerticalGroup(
- layout.createParallelGroup(GroupLayout.Alignment.LEADING)
- .addGroup(layout.createSequentialGroup()
- .addContainerGap()
- .addComponent(jScrollPane1, GroupLayout.DEFAULT_SIZE, 340, Short.MAX_VALUE)
- .addGap(18, 18, 18)
- .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(b_start)
- .addComponent(b_users))
- .addGap(18, 18, 18)
- .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE)
- .addComponent(b_clear)
- .addComponent(b_end))
- .addGap(4, 4, 4)
- .addComponent(lb_name))
- );
- pack();
- }// </editor-fold>//GEN-END:initComponents
- private void b_endActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_b_endActionPerformed
- try
- {
- Thread.sleep(5000); //5000 milliseconds is five second.
- }
- catch(InterruptedException ex) {Thread.currentThread().interrupt();}
- tellEveryone("Server:is stopping and all users will be disconnected.n:Chat");
- ta_chat.append("Server stopping... n");
- ta_chat.setText("");
- }//GEN-LAST:event_b_endActionPerformed
- private void b_startActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_b_startActionPerformed
- Thread starter = new Thread(new ServerStart());
- starter.start();
- ta_chat.append("Server started...n");
- }//GEN-LAST:event_b_startActionPerformed
- private void b_usersActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_b_usersActionPerformed
- ta_chat.append("n Online users : n");
- for (String current_user : users)
- {
- ta_chat.append(current_user);
- ta_chat.append("n");
- }
- }//GEN-LAST:event_b_usersActionPerformed
- private void b_clearActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_b_clearActionPerformed
- ta_chat.setText("");
- }//GEN-LAST:event_b_clearActionPerformed
- public static void main(String args[])
- {
- java.awt.EventQueue.invokeLater(new Runnable()
- {
- @Override
- public void run() {
- new server_frame().setVisible(true);
- }
- });
- }
- public class ServerStart implements Runnable
- {
- @Override
- public void run()
- {
- clientOutputStreams = new ArrayList();
- users = new ArrayList();
- try
- {
- ServerSocket serverSock = new ServerSocket(2222);
- while (true)
- {
- Socket clientSock = serverSock.accept();
- PrintWriter writer = new PrintWriter(clientSock.getOutputStream());
- clientOutputStreams.add(writer);
- Thread listener = new Thread(new ClientHandler(clientSock, writer));
- listener.start();
- ta_chat.append("Got a connection. n");
- }
- }
- catch (Exception ex)
- {
- ta_chat.append("Error making a connection. n");
- }
- }
- }
- public void userAdd (String data)
- {
- String message, add = ": :Connect", done = "Server: :Done", name = data;
- ta_chat.append("Before " + name + " added. n");
- users.add(name);
- ta_chat.append("After " + name + " added. n");
- String[] tempList = new String[(users.size())];
- users.toArray(tempList);
- for (String token:tempList)
- {
- message = (token + add);
- tellEveryone(message);
- }
- tellEveryone(done);
- }
- public void userRemove (String data)
- {
- String message, add = ": :Connect", done = "Server: :Done", name = data;
- users.remove(name);
- String[] tempList = new String[(users.size())];
- users.toArray(tempList);
- for (String token:tempList)
- {
- message = (token + add);
- tellEveryone(message);
- }
- tellEveryone(done);
- }
- public void tellEveryone(String message)
- {
- Iterator it = clientOutputStreams.iterator();
- while (it.hasNext())
- {
- try
- {
- PrintWriter writer = (PrintWriter) it.next();
- writer.println(message);
- ta_chat.append("Sending: " + message + "n");
- writer.flush();
- ta_chat.setCaretPosition(ta_chat.getDocument().getLength());
- }
- catch (Exception ex)
- {
- ta_chat.append("Error telling everyone. n");
- }
- }
- }
- // Variables declaration - do not modify//GEN-BEGIN:variables
- private JButton b_clear;
- private JButton b_end;
- private JButton b_start;
- private JButton b_users;
- private JScrollPane jScrollPane1;
- private JLabel lb_name;
- private JTextArea ta_chat;
- // End of variables declaration//GEN-END:variables
- }
Add Comment
Please, Sign In to add comment