// EchoServer.java
import java.io.*;
import java.net.*;
public class EchoServer implements Runnable
{
    Socket socket=null;
    static ServerSocket ss;
    EchoServer(Socket newSocket)
    {
        this.socket=newSocket;
    }
    public static void main(String args[]) throws IOException
    {
        ss=new ServerSocket(7000);
        System.out.println("Server Started");
        while(true)
            {
                Socket s = ss.accept();
                EchoServer es = new EchoServer(s);
                Thread t = new Thread(es);
                t.start();
            }
    }
    public void run()
    {
        try
            {
                BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                while(true)
                    {
                        System.out.println(in.readLine());
                    }
            }
        catch(Exception e)
            {}
    }
}

// EchoClientOne.java
import java.io.*;
import java.net.*;
public class EchoClientOne
{
    public static void main(String args[])throws IOException
    {
        Socket s=new Socket("localhost",7000);
        PrintStream out = new PrintStream(s.getOutputStream());
        ServerSocket ss = new ServerSocket(7001);
        Socket s1 = ss.accept();
        BufferedReader in1 = new BufferedReader(new InputStreamReader(s1.getInputStream()));
        PrintStream out1 = new PrintStream(s1.getOutputStream());
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str="Token";
        while(true)
            {
                if(str.equalsIgnoreCase("Token"))
                    {
                        System.out.println("Do you want to send some data");
                        System.out.println("Enter Yes or No");
                        str=br.readLine();
                        if(str.equalsIgnoreCase("Yes"))
                            {
                                System.out.println("Enter the data");
                                str=br.readLine();
                                out.println(str);
                            }
                        out1.println("Token");
                    }
                System.out.println("Waiting for Token");
                str=in1.readLine();
            }
    }
}

// EchoClientTwo.java
import java.io.*;
import java.net.*;
public class EchoClientTwo
{
    public static void main(String args[])throws IOException
    {
        Socket s=new Socket("localhost",7000);
        PrintStream out = new PrintStream(s.getOutputStream());
        Socket s2=new Socket("localhost",7001);
        BufferedReader in2 = new BufferedReader(new InputStreamReader(s2.getInputStream()));
        PrintStream out2 = new PrintStream(s2.getOutputStream());
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str;
        while(true)
            {
                System.out.println("Waiting for Token");
                str=in2.readLine();
                if(str.equalsIgnoreCase("Token"))
                    {
                        System.out.println("Do you want to send some data");
                        System.out.println("Enter Yes or No");
                        str=br.readLine();
                        if(str.equalsIgnoreCase("Yes"))
                            {
                                System.out.println("Enter the data");
                                str=br.readLine();
                                out.println(str);
                            }
                        out2.println("Token");
                    }
            }
    }
}
