RSS

Chatting dengan Beberapa PC/Laptop Menggunakan Java


Chatting dengan Beberapa PC/Laptop

Program ini digunakan untuk chating dengan beberapa PC/Laptop. Berikut adalah listing codenya.

MultiThreadChatServer.java
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) {
    }
  }
}

MultiThreadChatClient.java
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 = "10.17.193.86";

    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);
    }
  }
} 

Pertama, running program MultiThreadChatServer.java, kemudian akan muncul tampilan seperti ini.


Kemudian running program MultiThreadChatClient.java, kemudian pada tampilan MultiThreadChatClient akan muncul tampilan seperti ini.

Jika sudah terkoneksi, maka anda bisa langsung chat dengan PC/Laptop yang berbeda.

Jika ingin lebih jelasnya, silahkan download filenya dibawah ini:

0 komentar:

Posting Komentar

Copyright 2009 That's My Blog :D. All rights reserved.
Bread Machine Reviews | watch free movies online by Blogger Templates