Wednesday, 10 October 2012


Program for Multi Client Chat Server

Code:

Server.java
import java.io.*;
import java.net.*;
import java.util.*;

public class Server{


    public static void main(String args[]) {
List<clientThread> t= new ArrayList<clientThread>();          
Socket clientSocket = null;
ServerSocket serverSocket = null;
int port_number=1111;


        try {
        serverSocket = new ServerSocket(port_number);
        }
        catch (IOException e)
        {System.out.println(e);}
   
    while(true){
        try {
        clientSocket = serverSocket.accept();
clientThread th=new clientThread(clientSocket,t);
t.add(th);
th.start();


        }
        catch (IOException e) {
        System.out.println(e);}
    }
    }
}

class clientThread extends Thread{
   
    DataInputStream is = null;
    String line;
String destClient="";
String name;
PrintStream os = null;
Socket clientSocket = null;      
List<clientThread> t;
String clientIdentity;
   
    public clientThread(Socket clientSocket, List<clientThread> t){
    this.clientSocket=clientSocket;
        this.t=t;
    }
   
public void selectDestClient() throws IOException
{
int h=0;
os.println("\nTotal Members online in Chat room : "+t.size());
        os.println("\nWith whom you want to chat ?");
    if(t.size()>1)
    {
        for(int i=0; i<t.size(); i++)
        {
    if(t.get(i)!=this)
                                    {
            this.os.println((++h)+" ) - "+(t.get(i)).clientIdentity);
                                     }
if(t.indexOf(t.get(i))==(t.size()-1))
 {
os.println("\nPlease Enter the name from above list to chat : ");
wh:while(true)
   {
    destClient=is.readLine();
for(clientThread ct:t)
{
if(destClient.equalsIgnoreCase(ct.clientIdentity) && ct!=t)//!destClient.equalsIgnoreCase(clientIdentity))
{
os.println("\nYou are connected with "+destClient+"....Start enoying this chat service.\n\n_______________________________________________________________________\n");
return;
}
}
os.println("\nInvalid destination. --- There is NO user with name "+destClient+". \n\nPlease Re-enter : ");
continue;
}//wh:while

}
    }
    }else
    {
            this.os.println("\n- Currently no other client has logged in for Chatting.\n- You are the  first one.Wait for some clients....");
    }


}
    public void run()
    {
    try{
        is = new DataInputStream(clientSocket.getInputStream());
        os = new PrintStream(clientSocket.getOutputStream());
        os.println("Enter your name.");
        name = is.readLine();
                    clientIdentity=name;
        os.println("\n\nWelcome "+name+" to this chatting Application.\n\nInstructions :\n- To Sign-Out enter /quit in a new line\n- To view List of Chat Members enter /view amd follow the instructions.\n\n");
             for(int i=0; i<t.size(); i++)
        {
    if(t.get(i)!=this)
                                    {
  (t.get(i)).os.println("*** A new user "+name+" entered the chat room ***\n\n");
                                     }
}
selectDestClient();
        while (true) {
        line = is.readLine();

                if(line.startsWith("/view"))
{
selectDestClient();
continue;
}

                if(line.startsWith("/quit")) break;

    if(t.size()>1)
    {
        for(int i=0; i<t.size(); i++)
           {
if((t.get(i))!=this)
{
        if((t.get(i)).clientIdentity.equalsIgnoreCase(destClient))
                                   {
                                       (t.get(i)).os.println("\n\n<From "+this.clientIdentity+"> "+line);
                break;
            }

}
            }

    }


        }

    if(t.size()>1)
    {
        for(int i=0; i<t.size(); i++)
           {
        if(t.get(i)!=this)
                           (t.get(i)).os.println("*** The user "+name+" left the chat room***" );

    }
}
        os.println("*** Bye "+name+" ***");

        t.remove(this);
        is.close();
        os.close();
        clientSocket.close();
    }
    catch(IOException e){};
    }
}

Client.java
import java.io.*;
import java.net.*;

public class Client implements Runnable{
    static Socket clientSocket = null;
    static PrintStream os = null;
    static DataInputStream is = null;
    static BufferedReader inputLine = null;
    static boolean closed = false;
   
    public static void main(String[] args) {
    int port_number=1111;
        String host="localhost";

    try {
            clientSocket = new Socket(host, port_number);
            inputLine = new BufferedReader(new InputStreamReader(System.in));
            os = new PrintStream(clientSocket.getOutputStream());
            is = new DataInputStream(clientSocket.getInputStream());
        } catch (Exception e) {
            System.err.println("Exception occurred : "+e.getMessage());
        }

        if (clientSocket != null && os != null && is != null) {
            try {
                new Thread(new Client()).start();
       
        while (!closed) {
                    os.println(inputLine.readLine());
                }

        os.close();
        is.close();
        clientSocket.close();
            } catch (IOException e) {
                System.err.println("IOException:  " + e);
            }
        }
    }          
   
    public void run() {       
    String responseLine;
    try{
        while ((responseLine = is.readLine()) != null) {
    System.out.println(responseLine);
        if (responseLine.indexOf("*** Bye") != -1) break;
        }
            closed=true;
    } catch (IOException e) {
        System.err.println("IOException:  " + e);
    }
    }
}

Output:





Related Posts :



1 comment:

  1. can u able to modify server code in easy way as like client code...

    ReplyDelete