RSS

Pages

Multi Thread Chat Server dan Client


Multi thread chat server dan client ialah  program yang dapat melakukan chatting lebih dari satu komputer. Dalam pelajaran ini akan melakukan percobaan multi thread chat server dan client menggunakan bahasa java. Pertama jalankan telebih dahulu program server jika sudah berhasil maka jalankan program client, pada program client samakan terlebih dahulu IP dengan server. Jika sudah sama maka kita dapat terhubung dengan semua komputer yang terhubung dengan server.

Program Multi Thread Chat Server :
import java.io.DataInputStream;
import java.io.PrintStream;
import java.io.IOException;
import java.net.Socket;
import java.net.ServerSocket;

/*
 * chat server yang mengantar pesan publik dan private.
 */
public class MultiThreadChatServer {

  // server socket.
  private static ServerSocket serverSocket = null;
  // client socket.
  private static Socket clientSocket = null;

  // chat server dapat menerima sampai maxClientsCount pada koneksi client.
  private static final int maxClientsCount = 10;
  private static final clientThread[] threads = new clientThread[maxClientsCount];

  public static void main(String args[]) {

    // default port number.
    int portNumber = 2222;
    if (args.length < 1) {
      System.out
          .println("Usage: java MultiThreadChatServer <portNumber>\n"
              + "Now using port number=" + portNumber);
    } else {
      portNumber = Integer.valueOf(args[0]).intValue();
    }

    /*
     * buka server socket pada portNumber (default 2222). catatan:kita tidak da
     * pat memilih port dibawah 1023 jika kita bukan administrator (root).
     */
    try {
      serverSocket = new ServerSocket(portNumber);
    } catch (IOException e) {
      System.out.println(e);
    }

    /*
     * buat client socket untuk setiap koneksi dan sesuaikan dengan thread 
     * client baru.
     */
    while (true) {
      try {
        clientSocket = serverSocket.accept();
        int i = 0;
        for (i = 0; i < maxClientsCount; i++) {
          if (threads[i] == null) {
            (threads[i] = new clientThread(clientSocket, threads)).start();
            break;
          }
        }
        if (i == maxClientsCount) {
          PrintStream os = new PrintStream(clientSocket.getOutputStream());
          os.println("Server too busy. Try later.");
          os.close();
          clientSocket.close();
        }
      } catch (IOException e) {
        System.out.println(e);
      }
    }
  }
}

/*
 * Thread chat client . thread client ini membuka input dan output
 * streams untuk hubungan client, menanyakan nama client,menginformasikan semua
 * client yang terhubung ke server bahwa ada client baru yang terhubung ke da-
 * lam chatroom, selama data diterima, data di kembalikan ke semua
 * client. saat client meninggalkan chatroom thread ini juga menginformasikan
 * pada client lainnya.
 */
class clientThread extends Thread {

  private DataInputStream is = null;
  private PrintStream os = null;
  private Socket clientSocket = null;
  private final clientThread[] threads;
  private int maxClientsCount;

  public clientThread(Socket clientSocket, clientThread[] threads) {
    this.clientSocket = clientSocket;
    this.threads = threads;
    maxClientsCount = threads.length;
  }

  public void run() {
    int maxClientsCount = this.maxClientsCount;
    clientThread[] threads = this.threads;

    try {
      /*
       * membuat input dan output streams  untuk client.
       */
      is = new DataInputStream(clientSocket.getInputStream());
      os = new PrintStream(clientSocket.getOutputStream());
      os.println("Enter your name.");
      String name = is.readLine().trim();
      os.println("Hello " + name
          + " to our chat room.\nTo leave enter /quit in a new line");
      for (int i = 0; i < maxClientsCount; i++) {
        if (threads[i] != null && threads[i] != this) {
          threads[i].os.println("*** A new user " + name
              + " entered the chat room !!! ***");
        }
      }
      while (true) {
        String line = is.readLine();
        if (line.startsWith("/quit")) {
          break;
        }
        for (int i = 0; i < maxClientsCount; i++) {
          if (threads[i] != null) {
            threads[i].os.println("<" + name + "&gr; " + line);
          }
        }
      }
      for (int i = 0; i < maxClientsCount; i++) {
        if (threads[i] != null && threads[i] != this) {
          threads[i].os.println("*** The user " + name
              + " is leaving the chat room !!! ***");
        }
      }
      os.println("*** Bye " + name + " ***");

      /*
       * buat variabel thread terakhir menjadi null agar client baru
       * dapat diterima oleh server.
       */
      for (int i = 0; i < maxClientsCount; i++) {
        if (threads[i] == this) {
          threads[i] = null;
        }
      }

      /*
       * tutup output stream, tutup input stream, tutup socket.
       */
      is.close();
      os.close();
      clientSocket.close();
    } catch (IOException e) {
    }
  }
}

Hasil dari program sever di atas adalah :


Program Multi Thread Chat Client :
import java.io.DataInputStream;
import java.io.PrintStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

public class MultiThreadChatClient implements Runnable {

  //  client socket
  private static Socket clientSocket = null;
  //  output stream
  private static PrintStream os = null;
  //  input stream
  private static DataInputStream is = null;

  private static BufferedReader inputLine = null;
  private static boolean closed = false;

  public static void main(String[] args) {

    //  default port.
    int portNumber = 2222;
    //  default host.
    String host = "192.168.1.1";

    if (args.length < 2) {
      System.out
          .println("Usage: java MultiThreadChatClient <host> <portNumber>\n"
              + "Now using host=" + host + ", portNumber=" + portNumber);
    } else {
      host = args[0];
      portNumber = Integer.valueOf(args[1]).intValue();
    }

    /*
     * Buka sebuah socket pada host dan port. Buka input dan output streams.
     */
    try {
      clientSocket = new Socket(host, portNumber);
      inputLine = new BufferedReader(new InputStreamReader(System.in));
      os = new PrintStream(clientSocket.getOutputStream());
      is = new DataInputStream(clientSocket.getInputStream());
    } catch (UnknownHostException e) {
      System.err.println("Don't know about host " + host);
    } catch (IOException e) {
      System.err.println("Couldn't get I/O for the connection to the host "
          + host);
    }

    /*
     * Jika semua telah diinisialisasi lalu kita ingin menulis data pada socket yang kita buka pada koneksi port number.
     */
    if (clientSocket != null && os != null && is != null) {
      try {

        /* Buat sebuah thread untuk membaca dari server. */
        new Thread(new MultiThreadChatClient()).start();
        while (!closed) {
          os.println(inputLine.readLine().trim());
        }
        /*
         * tutup output stream, tutup input stream, tutup socket.
         */
        os.close();
        is.close();
        clientSocket.close();
      } catch (IOException e) {
        System.err.println("IOException:  " + e);
      }
    }
  }

  /*
   * buat sebuah thread untuk membaca dari server.
   */
  public void run() {
    /*
     * tetap membaca dari socket sampai kita menerima "Bye" dari
     * server. setelah diterima maka break.
     */
    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);
    }
  }
}

Hasil dari program client di atas seperti gambar di bawah ini :

                                    
Silahkan download materi di bawah ini agar lebih memudahkan untuk mempraktekkan dan memahami materi multi thread chat server dan client.
Download Di Sini

0 komentar:

Posting Komentar

Kamis, 26 Juni 2014

Multi Thread Chat Server dan Client



Multi thread chat server dan client ialah  program yang dapat melakukan chatting lebih dari satu komputer. Dalam pelajaran ini akan melakukan percobaan multi thread chat server dan client menggunakan bahasa java. Pertama jalankan telebih dahulu program server jika sudah berhasil maka jalankan program client, pada program client samakan terlebih dahulu IP dengan server. Jika sudah sama maka kita dapat terhubung dengan semua komputer yang terhubung dengan server.

Program Multi Thread Chat Server :
import java.io.DataInputStream;
import java.io.PrintStream;
import java.io.IOException;
import java.net.Socket;
import java.net.ServerSocket;

/*
 * chat server yang mengantar pesan publik dan private.
 */
public class MultiThreadChatServer {

  // server socket.
  private static ServerSocket serverSocket = null;
  // client socket.
  private static Socket clientSocket = null;

  // chat server dapat menerima sampai maxClientsCount pada koneksi client.
  private static final int maxClientsCount = 10;
  private static final clientThread[] threads = new clientThread[maxClientsCount];

  public static void main(String args[]) {

    // default port number.
    int portNumber = 2222;
    if (args.length < 1) {
      System.out
          .println("Usage: java MultiThreadChatServer <portNumber>\n"
              + "Now using port number=" + portNumber);
    } else {
      portNumber = Integer.valueOf(args[0]).intValue();
    }

    /*
     * buka server socket pada portNumber (default 2222). catatan:kita tidak da
     * pat memilih port dibawah 1023 jika kita bukan administrator (root).
     */
    try {
      serverSocket = new ServerSocket(portNumber);
    } catch (IOException e) {
      System.out.println(e);
    }

    /*
     * buat client socket untuk setiap koneksi dan sesuaikan dengan thread 
     * client baru.
     */
    while (true) {
      try {
        clientSocket = serverSocket.accept();
        int i = 0;
        for (i = 0; i < maxClientsCount; i++) {
          if (threads[i] == null) {
            (threads[i] = new clientThread(clientSocket, threads)).start();
            break;
          }
        }
        if (i == maxClientsCount) {
          PrintStream os = new PrintStream(clientSocket.getOutputStream());
          os.println("Server too busy. Try later.");
          os.close();
          clientSocket.close();
        }
      } catch (IOException e) {
        System.out.println(e);
      }
    }
  }
}

/*
 * Thread chat client . thread client ini membuka input dan output
 * streams untuk hubungan client, menanyakan nama client,menginformasikan semua
 * client yang terhubung ke server bahwa ada client baru yang terhubung ke da-
 * lam chatroom, selama data diterima, data di kembalikan ke semua
 * client. saat client meninggalkan chatroom thread ini juga menginformasikan
 * pada client lainnya.
 */
class clientThread extends Thread {

  private DataInputStream is = null;
  private PrintStream os = null;
  private Socket clientSocket = null;
  private final clientThread[] threads;
  private int maxClientsCount;

  public clientThread(Socket clientSocket, clientThread[] threads) {
    this.clientSocket = clientSocket;
    this.threads = threads;
    maxClientsCount = threads.length;
  }

  public void run() {
    int maxClientsCount = this.maxClientsCount;
    clientThread[] threads = this.threads;

    try {
      /*
       * membuat input dan output streams  untuk client.
       */
      is = new DataInputStream(clientSocket.getInputStream());
      os = new PrintStream(clientSocket.getOutputStream());
      os.println("Enter your name.");
      String name = is.readLine().trim();
      os.println("Hello " + name
          + " to our chat room.\nTo leave enter /quit in a new line");
      for (int i = 0; i < maxClientsCount; i++) {
        if (threads[i] != null && threads[i] != this) {
          threads[i].os.println("*** A new user " + name
              + " entered the chat room !!! ***");
        }
      }
      while (true) {
        String line = is.readLine();
        if (line.startsWith("/quit")) {
          break;
        }
        for (int i = 0; i < maxClientsCount; i++) {
          if (threads[i] != null) {
            threads[i].os.println("<" + name + "&gr; " + line);
          }
        }
      }
      for (int i = 0; i < maxClientsCount; i++) {
        if (threads[i] != null && threads[i] != this) {
          threads[i].os.println("*** The user " + name
              + " is leaving the chat room !!! ***");
        }
      }
      os.println("*** Bye " + name + " ***");

      /*
       * buat variabel thread terakhir menjadi null agar client baru
       * dapat diterima oleh server.
       */
      for (int i = 0; i < maxClientsCount; i++) {
        if (threads[i] == this) {
          threads[i] = null;
        }
      }

      /*
       * tutup output stream, tutup input stream, tutup socket.
       */
      is.close();
      os.close();
      clientSocket.close();
    } catch (IOException e) {
    }
  }
}

Hasil dari program sever di atas adalah :


Program Multi Thread Chat Client :
import java.io.DataInputStream;
import java.io.PrintStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

public class MultiThreadChatClient implements Runnable {

  //  client socket
  private static Socket clientSocket = null;
  //  output stream
  private static PrintStream os = null;
  //  input stream
  private static DataInputStream is = null;

  private static BufferedReader inputLine = null;
  private static boolean closed = false;

  public static void main(String[] args) {

    //  default port.
    int portNumber = 2222;
    //  default host.
    String host = "192.168.1.1";

    if (args.length < 2) {
      System.out
          .println("Usage: java MultiThreadChatClient <host> <portNumber>\n"
              + "Now using host=" + host + ", portNumber=" + portNumber);
    } else {
      host = args[0];
      portNumber = Integer.valueOf(args[1]).intValue();
    }

    /*
     * Buka sebuah socket pada host dan port. Buka input dan output streams.
     */
    try {
      clientSocket = new Socket(host, portNumber);
      inputLine = new BufferedReader(new InputStreamReader(System.in));
      os = new PrintStream(clientSocket.getOutputStream());
      is = new DataInputStream(clientSocket.getInputStream());
    } catch (UnknownHostException e) {
      System.err.println("Don't know about host " + host);
    } catch (IOException e) {
      System.err.println("Couldn't get I/O for the connection to the host "
          + host);
    }

    /*
     * Jika semua telah diinisialisasi lalu kita ingin menulis data pada socket yang kita buka pada koneksi port number.
     */
    if (clientSocket != null && os != null && is != null) {
      try {

        /* Buat sebuah thread untuk membaca dari server. */
        new Thread(new MultiThreadChatClient()).start();
        while (!closed) {
          os.println(inputLine.readLine().trim());
        }
        /*
         * tutup output stream, tutup input stream, tutup socket.
         */
        os.close();
        is.close();
        clientSocket.close();
      } catch (IOException e) {
        System.err.println("IOException:  " + e);
      }
    }
  }

  /*
   * buat sebuah thread untuk membaca dari server.
   */
  public void run() {
    /*
     * tetap membaca dari socket sampai kita menerima "Bye" dari
     * server. setelah diterima maka break.
     */
    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);
    }
  }
}

Hasil dari program client di atas seperti gambar di bawah ini :

                                    
Silahkan download materi di bawah ini agar lebih memudahkan untuk mempraktekkan dan memahami materi multi thread chat server dan client.
Download Di Sini

0 komentar on "Multi Thread Chat Server dan Client"

Posting Komentar