Aplikasi Chatting Multiclient Dengan Java

download Aplikasi Chatting Multiclient Dengan Java

of 11

description

Chatting menurut Bahasa Indonesia artinya mengobrol atau bercakap-cakap. Chatting memungkinkan kita dapat mengobrol dengan teman, keluarga, saudara atau mungkin mencari teman baru yang belum kita kenal. Chatting memungkinkan kita untuk selalu bisa berkomunikasi walaupun kita tidak berada bersamanya di suatu tempat. Aplikasi chatting merupakan suatu aplikasi yang memungkinkan pengguna (client) berkomunikasi teks secara langsung (Real Time) dengan pengguna lain dengan menggunakan media yang ada.

Transcript of Aplikasi Chatting Multiclient Dengan Java

  • Politeknik Negeri Sriwijaya

    Niki Astri | Teknik Komputer

    APLIKASI CHATTING MULTICLIENT DENGAN JAVA

    Chatting menurut Bahasa Indonesia artinya mengobrol atau bercakap-cakap. Chatting

    memungkinkan kita dapat mengobrol dengan teman, keluarga, saudara atau mungkin mencari

    teman baru yang belum kita kenal. Chatting memungkinkan kita untuk selalu bisa

    berkomunikasi walaupun kita tidak berada bersamanya di suatu tempat. Aplikasi chatting

    merupakan suatu aplikasi yang memungkinkan pengguna (client) berkomunikasi teks secara

    langsung (Real Time) dengan pengguna lain dengan menggunakan media yang ada.

    Java merupakan suatu bahasa pemograman yang multi platform dan multi device. Java

    juga merupakan bahasa pemograman yang berorientasi objek dan program java tersusun dari

    bagian yang disebut kelas. Kelas terdiri atas metode-metode yang melakukan pekerjaan dan

    mengembalikan informasi setelah melakukan tugasnya. Beberapa keunggulan java yaitu java

    merupakan bahasa yang sederhana. Java dirancang agar mudah dipelajari dan digunakan secara

    efektif.

    Pada bagian kali ini saya akan mencoba untuk membuat suatu aplikasi chatting multiclient

    sederhana dengan menggunakan tampilan grafis berbasis bahasa pemograman java. Dimana

    nanti masing-masing client yang terhubung ke jaringan dapat langsung bercakap-cakap secara

    langsung.

    Pertama yang harus dilakukan kita terlebih dahulu melakukan setting alamat IP pada

    masing-masing client. Pada percobaan ini kita akan menggunakan 1 server dan 3 client, pada

    program ini maksimal client adalah 6 client. Adapun alamat IP nya adalah sebagai berikut :

    a. Server

    Ip address : 10.10.10.2

    Netmask : 255.0.0.0

    b. Client 1

    Ip address : 10.10.10.1

    Netmask : 255.0.0.0

  • Politeknik Negeri Sriwijaya

    Niki Astri | Teknik Komputer

    c. Client 2

    Ip address : 10.10.10.3

    Netmask : 255.0.0.0

    Setelah melakukan konfigurasi IP pada masing-masingi komputer kemudian kita juga

    harus memastikan bahwa firewall pada masing-masing komputer harus diaktifkan karena

    pada beberapa kasus program ini tidak dapat saling terkoneksi akibat firewall yang aktif pada

    sistem operasinya.

    Kemudian langkah selanjutnya kita mengetikan listing program java untuk aplikasi

    chatting ini dengan menggunakan TextPad. Programnya terbagi menjadi dua bagian yaitu bagian

    server dan client. Adapun listing programnya adalah sebagai berikut.

    1. 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];

  • Politeknik Negeri Sriwijaya

    Niki Astri | Teknik Komputer

    public static void main(String args[]) {

    // default port number.

    int portNumber = 2222;

    if (args.length < 1) {

    System.out

    .println("Usage: java MultiThreadChatServer \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;

  • Politeknik Negeri Sriwijaya

    Niki Astri | Teknik Komputer

    }

    }

    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;

  • Politeknik Negeri Sriwijaya

    Niki Astri | Teknik Komputer

    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("

  • Politeknik Negeri Sriwijaya

    Niki Astri | Teknik Komputer

    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) {

    }

    }

    }

    2. 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;

  • Politeknik Negeri Sriwijaya

    Niki Astri | Teknik Komputer

    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.10.10.2";

    if (args.length < 2) {

    System.out

    .println("Usage: java MultiThreadChatClient

    \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 {

  • Politeknik Negeri Sriwijaya

    Niki Astri | Teknik Komputer

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

    }

    }

    }

  • Politeknik Negeri Sriwijaya

    Niki Astri | Teknik Komputer

    /*

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

    }

    }

    }

    Jika kedua program telah selesai dibuat maka kita compile program tersebut dengan

    menekan tombol CTRL + 1. Jika progam tidak memiliki kesalahan akan timbul pesan Tool

    Compiled Successfully. Kemudian jalankan program dengan CMD. Adapun hasil programnya

    adalah sebagai berikut :

  • Politeknik Negeri Sriwijaya

    Niki Astri | Teknik Komputer

    1. MultiThreadChatServer.java

    Gambar 1. Pada Server

    2. MultiThreadChatClient.java Pada Client

    Gambar 2. Pada Client 1

  • Politeknik Negeri Sriwijaya

    Niki Astri | Teknik Komputer

    Gambar 2. Pada Client 1

    Gambar 3. Pada Client 2

    Dari Program yang telah dibuat dapat diketahui bahwa dengan menggunakan fungsi

    socket pada java, antara komputer cilent dan server dapat saling tehubung. Dengan fungsi

    Thread antara komputer client dengan client lainnya dapat saling terus menerus

    berkomunikasi tanpa harus saling menunggu balasan. Karena fungsi thread tersebut akan

    menjalankan proses pengiriman pesan disaat yang bersamaan dan masing-masing client dapat

    mengetahui client yang baru bergabung pada suatu jaringan. Percobaan yang dilakukan berjalan

    dengan sukses Jika terjadi error mungkin terdapat kesalahan pada salah satu baris program yang

    dijalankan dan dapat diketahui pada saat anda mengcompile file tersebut.