puneetverma0711
puneetverma0711

Reputation: 145

Simple text chat application

I have developed simple text chat application using applets in java. It consists of two files.

  1. server.java-> to access server part
  2. client.java-> to access client part

After opening both applet , chat can happen between server & client.

Here's my server side code:

    Serverfile.java

    import java.net.*;
    import java.io.*;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;

    public class serverfile extends JFrame {
    private JTextField usertext;
    private JTextArea chatwindow;
    private ObjectOutputStream output;
    private ObjectInputStream input;
    private ServerSocket server;
    private Socket connection;

    public serverfile(){
    super("server messaging system");    
    usertext= new JTextField();
    usertext.setEditable(false);
    usertext.addActionListener( new ActionListener(){
    public void actionPerformed(ActionEvent event){
    sendmessage(event.getActionCommand());
    usertext.setText("");
      }
    }
    );
    add(usertext,BorderLayout.SOUTH);
    chatwindow= new JTextArea();
    add(new JScrollPane(chatwindow));
    setSize(300,250);
    setVisible(true);
    }

   public void startrunning(){
   try{
   server= new ServerSocket(6789,100);
   while(true){
   try{
   waitForConnection();
   setupstream();
   whilechatting();
   }catch(Exception e){
   System.out.println("you have an error in coversation with client");
   }finally{
   closecrap();
   }
   }
   }
   catch(Exception e){
   System.out.println("you have an error in connecting with client");
   }
   }
   private void waitForConnection() throws IOException{

   showmessage("waiting for someone to connect");
   connection= server.accept();
   showmessage("now connected to"+connection.getInetAddress().getHostName());
   }

   private void setupstream() throws IOException{

   output= new ObjectOutputStream(connection.getOutputStream());
   output.flush();
   input= new ObjectInputStream(connection.getInputStream());
   showmessage("\n streams are setup");
   }

   private void whilechatting()throws IOException{

   String message = "\n you are now connected";
   sendmessage(message);
   ableToType(true);
   do{
   try{
   message = (String)input.readObject();
   showmessage("\n"+message);
   catch(Exception e){
   System.out.println("\n error in reading message");
   }
   }while(!message.equals("CLIENT-END"));
   }

   private void closecrap(){

   showmessage("\nclosing connection");
   ableToType(false);
   try{
   output.close();
   input.close();
   connection.close();
   }catch(Exception e){
   System.out.println("\n error in closing server");

   }
   }

   private void sendmessage(String message){

   try{
   output.writeObject("SERVER-"+message);
   output.flush();
   }catch(Exception e){
   chatwindow.append("\n error in sending message from server side");
   }
   }

   private void showmessage(final String text){

   SwingUtilities.invokeLater( new Runnable(){
   public void run(){
   chatwindow.append(text);
   }
    }
   );
    }

   private void ableToType(final boolean tof){

   SwingUtilities.invokeLater( new Runnable(){
    public void run(){
    usertext.setEditable(tof);
    }
    }
    );
    }
    }


    Server.java-> which access serverfile code:

    import javax.swing.JFrame

     public class server {
      public static void main(String args[]){
      serverfile obj1= new serverfile();
      obj1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     obj1.startrunning();
         }    
           }

My client side code:

    Clientfile.java

    import java.net.*;
    import java.io.*;
    import java.awt.*;
     import java.awt.event.*;
      import javax.swing.*;

        public class clientfile extends JFrame {
          private JTextField usertext;
          private JTextArea chatwindow;
          private ObjectOutputStream output;
           private ObjectInputStream input;
          private String message="";
            private String serverIP;
            private ServerSocket server;
               private Socket connection;

             public clientfile(String host){
              super("client messaging system");  
             serverIP=host;
            usertext= new JTextField();
 usertext.setEditable(false);
 usertext.addActionListener( new ActionListener(){
 public void actionPerformed(ActionEvent event){
     sendmessage(event.getActionCommand());
     usertext.setText("");
      }
 }
 );
 add(usertext,BorderLayout.SOUTH);
 chatwindow= new JTextArea();
 add(new JScrollPane(chatwindow));
 setSize(300,250);
 setVisible(true);
}

        public void startrunning(){
            try{
       connecttoserver();
         setupstream();
          whilechatting();
        }catch(Exception e){
         System.out.println("you have an error in coversation with server");
            }
           finally{
           closecrap();
               }
               }
            private void connecttoserver() throws IOException{
          showmessage("attempting connection");
          connection= new Socket(InetAddress.getByName(serverIP),6789);
         showmessage("connected to"+connection.getInetAddress().getHostName());
           }
             private void setupstream() throws IOException{
             output= new ObjectOutputStream(connection.getOutputStream());
          output.flush();
            input= new ObjectInputStream(connection.getInputStream());
        showmessage("\n streams are good to go");
              }

          private void whilechatting()throws IOException{
         ableToType(true);
            do{
           try{
           message = (String)input.readObject();
             showmessage("\n"+message);
        }catch(Exception e){
          System.out.println("\n error in writing message");
            }
        }while(!message.equals("SERVER - END"));
             }

        private void closecrap(){
       showmessage("\nclosing....");
         ableToType(false);
              try{
        output.close();
        input.close();
         connection.close();
         }catch(Exception e){
          System.out.println("\n error in closing client");
       }
          }
         private void sendmessage(String message){
           try{
          output.writeObject("CLIENT-"+message);
           output.flush();
           }catch(Exception e){
           chatwindow.append("\n error in sending message from client side");
             }
               }
            private void showmessage(final String m){
             SwingUtilities.invokeLater( new Runnable(){
             public void run(){
            chatwindow.append(m);
           }
              }
                 );
                       }

               private void ableToType(final boolean tof){
           SwingUtilities.invokeLater( new Runnable(){
               public void run(){
               usertext.setEditable(tof);
              }
            }
               );
               }
              }



    Client.java-> access client file code

           import javax.swing.JFrame;

          public class client {
           public static void main(String args[]){
         clientfile obj2= new clientfile("127.0.0.1");
          obj2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            obj2.startrunning();
              }        
                 }

What i want to know is how can i access chat in two different computer? Is it possible?

I want server.java on one computer & client.java on another computer. Please if anyone have any solution, let me know. feel free to ask questions.

Upvotes: 1

Views: 11461

Answers (2)

Sai Sunder
Sai Sunder

Reputation: 1021

Suppose your server program is running on system with ip 110.10.9.8 (just a sample) In the client code line connection= new Socket(InetAddress.getByName(serverIP),6789);, replace InetAddress.getByName(serverIP) by 110.10.9.8. To know the IP of the server system just type "what is my IP" in goole. Remember that its dynamic IP and changes each time your modem or router restarts. So you have to find the IP each time. If you want to have something similar to static IP visit this

Upvotes: 1

Sithsu
Sithsu

Reputation: 2219

Yes, its possible to run server and client in two hosts.
Change your client class to accept IP of server in some way - through command line arguement, through keyboard input, etc. - instead of hardcoding "127.0.0.1" which is localhost

import javax.swing.JFrame;

public class client {
    public static void main(String args[]){
        clientfile obj2= new clientfile(args[0]); // taken from command line args
        obj2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        obj2.startrunning();
    }        
}

And run the client as java client 192.168.0.3 where 192.168.0.3 need to be replaced with the private IP of the host running your server.
IP of host running server can be obtained by executing ipconfig in windows or ifconfig in Linux/Ubuntu.

Upvotes: 1

Related Questions