Saturday, 14 March 2015

Implement a Multi-threading application for echo server using socket programming in JAVA

//Implement a Multi-threading application for echo server using socket programming in JAVA

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

public class Client {
    public static void main(String[] args) {
   
    String hostname = "localhost";
    int port = 6789;

    // declaration section:
    // clientSocket: our client socket
    // os: output stream
    // is: input stream
   
        Socket clientSocket = null; 
        DataOutputStream os = null;
        BufferedReader is = null;
   
    // Initialization section:
    // Try to open a socket on the given port
    // Try to open input and output streams
   
        try {
            clientSocket = new Socket(hostname, port);
            os = new DataOutputStream(clientSocket.getOutputStream());
            is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        } catch (UnknownHostException e) {
            System.err.println("Don't know about host: " + hostname);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection to: " + hostname);
        }
   
    // If everything has been initialized then we want to write some data
    // to the socket we have opened a connection to on the given port
   
    if (clientSocket == null || os == null || is == null) {
        System.err.println( "Something is wrong. One variable is null." );
        return;
    }

    try {
        while ( true ) {
        System.out.print( "Enter an integer (0 to stop connection, -1 to stop server): " );
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String keyboardInput = br.readLine();
        os.writeBytes( keyboardInput + "\n" );

        int n = Integer.parseInt( keyboardInput );
        if ( n == 0 || n == -1 ) {
            break;
        }
       
        String responseLine = is.readLine();
        System.out.println("Server returns its square as: " + responseLine);
        }
       
        // clean up:
        // close the output stream
        // close the input stream
        // close the socket
       
        os.close();
        is.close();
        clientSocket.close();  
    } catch (UnknownHostException e) {
        System.err.println("Trying to connect to unknown host: " + e);
    } catch (IOException e) {
        System.err.println("IOException:  " + e);
    }
    }          
}

-------------------------------------------------------------------------------------------------------------------------
 //Server2.java
import java.io.*;
import java.net.*;

public class Server2 {
    public static void main(String args[]) {
    int port = 6789;
    Server2 server = new Server2( port );
    server.startServer();
    }

    // declare a server socket and a client socket for the server;
    // declare the number of connections

    ServerSocket echoServer = null;
    Socket clientSocket = null;
    int numConnections = 0;
    int port;
   
    public Server2( int port ) {
    this.port = port;
    }

    public void stopServer() {
    System.out.println( "Server cleaning up." );
    System.exit(0);
    }

    public void startServer() {
    // Try to open a server socket on the given port
    // Note that we can't choose a port less than 1024 if we are not
    // privileged users (root)
   
        try {
        echoServer = new ServerSocket(port);
        }
        catch (IOException e) {
        System.out.println(e);
        }  
   
    System.out.println( "Server is started and is waiting for connections." );
    System.out.println( "With multi-threading, multiple connections are allowed." );
    System.out.println( "Any client can send -1 to stop the server." );

    // Whenever a connection is received, start a new thread to process the connection
    // and wait for the next connection.
   
    while ( true ) {
        try {
        clientSocket = echoServer.accept();
        numConnections ++;
        Server2Connection oneconnection = new Server2Connection(clientSocket, numConnections, this);
        new Thread(oneconnection).start();
        }  
        catch (IOException e) {
        System.out.println(e);
        }
    }
    }
}

class Server2Connection implements Runnable {
    BufferedReader is;
    PrintStream os;
    Socket clientSocket;
    int id;
    Server2 server;

    public Server2Connection(Socket clientSocket, int id, Server2 server) {
    this.clientSocket = clientSocket;
    this.id = id;
    this.server = server;
    System.out.println( "Connection " + id + " established with: " + clientSocket );
    try {
        is = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        os = new PrintStream(clientSocket.getOutputStream());
    } catch (IOException e) {
        System.out.println(e);
    }
    }

    public void run() {
        String line;
    try {
        boolean serverStop = false;

            while (true) {
                line = is.readLine();
        System.out.println( "Received " + line + " from Connection " + id + "." );
                int n = Integer.parseInt(line);
        if ( n == -1 ) {
            serverStop = true;
            break;
        }
        if ( n == 0 ) break;
                os.println("" + n*n );
            }

        System.out.println( "Connection " + id + " closed." );
            is.close();
            os.close();
            clientSocket.close();

        if ( serverStop ) server.stopServer();
    } catch (IOException e) {
        System.out.println(e);
    }
    }
}
---------------------------------------------------O/P-------------------------------------------------------------
test@test-ThinkCentre-M72e:~$ javac Client.java
test@test-ThinkCentre-M72e:~$ javac Client.java

test@test-ThinkCentre-M72e:~$ java Client
Enter an integer (0 to stop connection, -1 to stop server): 

test@test-ThinkCentre-M72e:~$ javac Server2.java
test@test-ThinkCentre-M72e:~$ java Server2
Server is started and is waiting for connections.
With multi-threading, multiple connections are allowed.
Any client can send -1 to stop the server.
Connection 1 established with: Socket[addr=/127.0.0.1,port=51452,localport=6789]


No comments:

Post a Comment