Sunday, 27 January 2013

Client-Server Chat Application

Server  Side Application

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Label;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;

import java.net.ServerSocket;
import java.net.Socket;

import javax.swing.JFrame;
import javax.swing.JPasswordField;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.SwingUtilities;

public class Server {
public static void main(String []a1){
Chat c=new Chat();

}

}
class Chat{
JFrame frame;
Panel login_panel,message_panel,chat_panel;
Label lUserName,lPassword,lmessage;
TextField tUserName,message;
JTextArea chatWindow;
JPasswordField tPassword;
Button login, cancel,send;

ServerSocket ss;
    Socket s1;
    ObjectInputStream ois;
    ObjectOutputStream oos;
    BufferedReader br;
    BufferedWriter bw;
    PrintWriter pw;
    String input,username="SERVER";
 
MenuBar menubar;
Menu history,available;
MenuItem exit,logout,conversation;

    public Chat(){
frame = new JFrame("Login");
login_panel = new Panel();
lUserName = new Label("User Name");
tUserName = new TextField(15);
lPassword = new Label("Password");
tPassword = new JPasswordField(15);
login = new Button("Login");
login.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
String in,password="";
username=(String)tUserName.getText();
try{
br=new BufferedReader(new FileReader("Login.txt"));
for(char i:tPassword.getPassword())
password+=i;
while((in=br.readLine())!=null){
String []s=in.split("~");
if(s[0].equals(username)&&s[1].equals(password)){
frame.remove(lmessage);
login_panel.setVisible(false);
frame.add(chat_panel);
chat_panel.setSize(200, 300);
frame.setSize(300,300);
frame.setMenuBar(menubar);
chat_panel.setVisible(true);
frame.setTitle(username);
break;
}else{
lmessage.setText("Username and Password is worng !");
}
}
}catch(IOException exception){
exception.printStackTrace();
}
}
}
);
cancel = new Button("Cancel");
cancel.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
tUserName.setText("");
tPassword.setText("");
}
}
);
lmessage=new Label();
login_panel.add(lUserName);
login_panel.add(tUserName);
login_panel.add(lPassword);
login_panel.add(tPassword);
login_panel.add(login);
login_panel.add(cancel);
frame.add(lmessage,BorderLayout.SOUTH);
frame.add(login_panel);

menubar=new MenuBar();

history=new Menu("History");
conversation=new MenuItem("conversation");
history.add(conversation);
conversation.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
br=new BufferedReader(new FileReader("conversation.txt"));
String s;
while((s=br.readLine())!=null){
chatWindow.append(s+"\n");
}
} catch (Exception e1) {
e1.printStackTrace();
}
}
}
);

available=new Menu("Available");
logout=new MenuItem("Logout");
logout.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
frame.remove(chat_panel);
tUserName.setText("");
tPassword.setText("");
                                        frame.remove(menubar);
login_panel.setVisible(true);
frame.add(login_panel);
frame.setSize(215, 250);
}
}
);

exit=new MenuItem("Exit");
exit.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
);

available.add(logout);
available.add(exit);

menubar.add(history);
menubar.add(available);

message_panel=new Panel();
chatWindow=new JTextArea(10,20);

message=new TextField(20);
message.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
sendMessage(e.getActionCommand());
message.setText("");
}
}
);

send=new Button("send");
send.addActionListener(
new ActionListener() {
public void actionPerformed(ActionEvent e) {
String msg=message.getText();
sendMessage(msg);
message.setText("");
}
}
);

message_panel.add(message);
message_panel.add(send);
chat_panel=new Panel();
chat_panel.add(new JScrollPane(chatWindow));
chat_panel.add(message_panel);
login_panel.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setBounds(100, 100, 215, 250);
frame.setVisible(true);
startChatting();
}
 
public void startChatting(){
     try{
         ss = new ServerSocket(1234);
         while(true){
            try{
                showMessage("\n Waiting for someone to connect... \n");
                s1 = ss.accept();
                showMessage(" Now connected to " + s1.getInetAddress().getHostName());
   
                //pw=new PrintWriter(new FileWriter("conversation.txt"));
                //pw.flush();
             
                bw=new BufferedWriter(new FileWriter("conversation.txt"));
                bw.flush();
             
                oos = new ObjectOutputStream(s1.getOutputStream());
                oos.flush();
                ois = new ObjectInputStream(s1.getInputStream());

                String message = " You are now connected! ";
                sendMessage(message);
                do{
                   try{
                      message = (String) ois.readObject();
                      showMessage("\n" + message);
                      saveMessage("\n" + message);
                   }catch(ClassNotFoundException classNotFoundException){
                      showMessage("\n there is some problem in message ");
                   }
                }while(!message.equals("CLIENT - END"));
             
            }catch(Exception exception){
               showMessage("\n Server ended the connection! ");
            }finally{
            ois.close();
            oos.close();
            //pw.close();
            br.close();
            s1.close();
            }
         }
      }catch(IOException ioException){
         ioException.printStackTrace();
      }finally{
      try {
ois.close();
oos.close();
      } catch (IOException e) {
e.printStackTrace();
      }
      }
}

private void sendMessage(String msg){
try {
oos.writeObject(username+" : "+msg);
oos.flush();
showMessage("\n"+username+" : "+msg);
saveMessage("\n"+username+" : " + msg);
} catch (IOException e) {
e.printStackTrace();
}
}

private void showMessage(final String msg){
SwingUtilities.invokeLater(
new Runnable(){
public void run(){
chatWindow.append(msg);
}
}
);
}
private void saveMessage(String message){
try {
            bw.append(message+"\n");
            bw.flush();
} catch (Exception e) {
e.printStackTrace();
}
}
}

save file as Server.java


Client Side Application

import java.awt.BorderLayout;
import java.awt.Button;
import java.awt.Label;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.Panel;
import java.awt.TextField;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;

import java.net.Socket;

import javax.swing.*;

public class Client {

    public static void main(String[] args) {
        Chat c=new Chat();
    }
}
class Chat{

    JFrame frame;
    Panel login_panel,message_panel,chat_panel;
    Label lUserName,lPassword,lmessage;
    TextField tUserName,message;
    JTextArea chatWindow;
    JPasswordField tPassword;
    Button login, cancel,send;

    Socket s1;
    ObjectInputStream ois;
    ObjectOutputStream oos;
    BufferedReader br;
    BufferedWriter bw;
    PrintWriter pw;
    String input,username="CLIENT";
 
    MenuBar menubar;
    Menu history,available;
    MenuItem conversation,logout,exit;
    public Chat(){
        frame = new JFrame("Login");
        login_panel = new Panel();
        lUserName = new Label("User Name");
        tUserName = new TextField(15);
        lPassword = new Label("Password");
        tPassword = new JPasswordField(15);
        lmessage = new Label();
        login = new Button("Login");
        login.addActionListener(
            new ActionListener() {
                public void actionPerformed(ActionEvent arg0) {
                    String in,password="";
                    username=(String)tUserName.getText();
                    try{
                        br=new BufferedReader(new FileReader("Login.txt"));
                        for(char i:tPassword.getPassword()) {
                            password+=i;
                        }
                        while((in=br.readLine())!=null){
                            String []s=in.split("~");
                            if(s[0].equals(username)&&s[1].equals(password)){
                                frame.remove(lmessage);
                                login_panel.setVisible(false);
                                frame.add(chat_panel);
                                chat_panel.setSize(200, 300);
                                frame.setSize(300,300);
                                frame.setMenuBar(menubar);
                                chat_panel.setVisible(true);
                                frame.setTitle(username);
                                break;
                            }else{
                                lmessage.setText("Username and Password is worng !");
                            }
                        }
                    }catch(IOException exception){
                        exception.printStackTrace();
                    }
                }
            }
        );
     
        cancel = new Button("Cancel");
        cancel.addActionListener(
            new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    tUserName.setText("");
                    tPassword.setText("");
                }
            }
        );
        login_panel.add(lUserName);
        login_panel.add(tUserName);
        login_panel.add(lPassword);
        login_panel.add(tPassword);
        login_panel.add(login);
        login_panel.add(cancel);
        frame.add(lmessage,BorderLayout.SOUTH);
        frame.add(login_panel);

        message_panel=new Panel();
        chatWindow=new JTextArea(10,20);

        message=new TextField(20);
        message.addActionListener(
            new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    sendMessage(e.getActionCommand());
                    message.setText("");
                }
            }
        );

        send=new Button("send");
        send.addActionListener(
            new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    String msg=message.getText();
                    sendMessage(msg);
                    message.setText("");
                }
            }
        );
        menubar=new MenuBar();

        history=new Menu("History");
        conversation=new MenuItem("conversation");
        history.add(conversation);
        conversation.addActionListener(
            new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    try {
                        br=new BufferedReader(new FileReader("conversation.txt"));
                        String s;
                        while((s=br.readLine())!=null){
                        chatWindow.append(s+"\n");
                    }
                    } catch (Exception e1) {
                        e1.printStackTrace();
                    }
                }
            }
        );
     
        available=new Menu("Available");
        logout=new MenuItem("Logout");
        logout.addActionListener(
            new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    frame.remove(chat_panel);
                    tUserName.setText("");
                    tPassword.setText("");
                    frame.remove(menubar);
                    login_panel.setVisible(true);
                    frame.add(login_panel);
                    frame.setSize(215, 250);
                }
            }
        );

        exit=new MenuItem("exit");
        exit.addActionListener(
            new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    System.exit(0);
                }
            }
        );
             
        available.add(logout);
        available.add(exit);
        menubar.add(history);
        menubar.add(available);

        message_panel.add(message);
        message_panel.add(send);
        chat_panel=new Panel();
        chat_panel.add(new JScrollPane(chatWindow));
        chat_panel.add(message_panel);
        login_panel.setVisible(true);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setBounds(100, 100, 215, 250);
        frame.setVisible(true);
        startChatting();
    }
 
    public void startChatting(){
        try{
            String host=JOptionPane.showInputDialog("IP address");
            showMessage("Attempting connection... \n");
            s1 = new Socket(host, 1234);
            showMessage("Connected to: " + s1.getInetAddress().getHostName());
         
            bw=new BufferedWriter(new FileWriter("conversation.txt"));
            bw.flush();
         
            oos = new ObjectOutputStream(s1.getOutputStream());
            oos.flush();
            ois = new ObjectInputStream(s1.getInputStream());

            do{
                try{
                    input = (String) ois.readObject();
                    showMessage("\n" + input);
                    saveMessage("\n" + input);
                }catch(ClassNotFoundException classNotfoundException){
                    showMessage("\n there is some problem in message ");
                }
            }while(!message.equals("SERVER - END"));

        }catch(Exception e){
            showMessage("\n Client ended the connection! ");
        }finally{
         
        }
    }
 
    private void sendMessage(String msg){
        try {
            oos.writeObject(username+" : "+msg);
            oos.flush();
            showMessage("\n"+username+" : " + msg);
            saveMessage("\n"+username+" : " + msg);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void showMessage(final String msg){
        SwingUtilities.invokeLater(
            new Runnable(){
                public void run(){
                    chatWindow.append(msg);
                }
            }
        );
    }
    private void saveMessage(String message){
        try {
            bw.append(message+"\n");
            bw.flush();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

save file as Client.java


Create log in text file for user

(username)~(password)

ayyaz~shamshad
imran~riyaz
obid~sawood


save this file both Server.java and Client.java directory as Login.txt

You have to run Server.java first then Client.java



No comments:

Post a Comment