PEMROGRAMAN TCP SOCKET

Posted by Unknown Jumat, 13 Desember 2013 2 komentar
Socket adalah sebuah abstraksi perangkat lunak yang digunakan sebagai suatu “terminal” dari suatu hubungan antara dua mesin atau proses yang saling berinterkoneksi. (Wiharto, 2010)
Ada beberapa langkah yang harus dilakukan untuk dapat berkomunikasi melalui socket dengan TCP. Di sini saya memberi contoh sederhana menggunakan bahasa pemrograman Java dengan editor netbeans.
Socket dapat melakukan beberapa operasi yakni : koneksi ke mesin remote, mengirim data (write), menerima data (read), menutup koneksi (close), bind to port, listen pada data yang masuk dan menerima koneksi dari mesin remote pada port tertentu. Karena namanya saja socket programming, maka masing-masing mesin yang saling berinteraksi harus terpasang socket pula.

TCP
Dalam socket programming dapat dibangun dengan menggunakan model paket TCP (untuk connection oriented).
TCP (Transmission Control Protocol) merupakan protokol yang bersifat connection-oriented, artinya komunikasi yang melewatinya membutuhkan handshaking untuk mengatur koneksi end-to-end. Koneksi dapat dibuat dari client ke server, dan kemudian banyak data dapat dikirimkan melalui koneksi itu.


Berikut adalah contoh source programnya :


*Program sisi server untuk single-line text echo*


// Server yang mengirim kembali pesan dari client
// Pada akhir dialog, mengirim pesan yang mengindikasikan jumlah pesan
// yang diterima. Menggunakan TCP.

import java.io.*;
import java.net.*;

/**
 * applikasi ini adalah applikasi server yang menerima string dari applikasi client dan mengembalikan string tersebut kepada applikasi client, dimana applikasi ini menggunakan protocol TCP / transmission control protocol
 * @author Muhammad Luthfi Kasim P2700211436
 */
public class TCPEchoServer {
    /**
     * Deklarasi variabel statik socket dan port
     */
    private static ServerSocket servSock;
    private static final int PORT = 1234;
    /**
     * prosedur utama dari applikasi
     * @param args
     */
    public static void main(String[] args) {
        /**
         * menampilkan pesan membuka port
         */
        System.out.println("Opening port...\n");
        try {
            /**
             * membuka socket sesuai dengan port yang diberikan
             */
            servSock = new ServerSocket(PORT);
        } catch (Exception e) {
            /**
             * menampilkan pesan jika tidak dapat membuka server
             */
            System.out.println("unable to attach to port!");
            /**
             * keluar dari applikasi
             */
            System.exit(1);
        }
        do {
            /**
             * jalankan prosedur run
             */
            run();
        } while (true);
    }
    /**
     * prosedur ini menerima kiriman pesan melalui socket dari applikasi client
     */
    private static void run(){
        /**
         * deklarasi variabel link bertipe socket
         */
        Socket link = null;
        try {
            /**
             * menyimpan server socket
             */
            link = servSock.accept();
            /**
             * deklarasi variabel in yang menyimpan pesan diterima melalui socket
             */
            BufferedReader in = new BufferedReader(new InputStreamReader(link.getInputStream()));
            /**
             * deklarasi variabel out yang bertipe printwriter
             */
            PrintWriter out = new PrintWriter(link.getOutputStream(),true);
            /**
             * deklarasi variabel numPesan bertipe integer yang berfungsi menghitung banyaknya pesan
             */
            int numPesan = 0;
            /**
             * deklarasi variabel pesan bertipe string dan inisialisasi variabel tersebut dari pesan yang dikirimkan oleh applikasi client
             */
            String pesan = in.readLine();
            /**
             * membaca pesan dari applikasi client hingga mencapai kata kunci selesai dimana kata kunci itu adakah "***TUTUP***"
             */
            while(!pesan.equals("***TUTUP***")){
                /**
                 * menampilkan pesan "Pesan diterima"
                 */
                System.out.println("Pesan diterima");
                /**
                 * menambah jumlah pesan yang diterima dari applikasi client
                 */
                numPesan++;
                /**
                 * menampilkan jumlah pesan yang diterima
                 */
                System.out.println("Pesan "+ numPesan + ": " + pesan);
                /**
                 * mengganti isi pesan yang lama dengan pesan yang baru, dimana isi variabel pesan diambil variabel in
                 */
                pesan = in.readLine();
            }
           /**
            * menampilkan pesan "Pesan diterima"
            */
            System.out.println(numPesan+" pesan diterima");
        } catch (IOException e) {
            e.printStackTrace();
        }
        /**
         * penutupan koneksi untuk mencegah kebocoran resource, dimana blok finally akan tetap dieksekusi meskipun terjadi permasalah pada blok try and catch
         */
        finally {
            try {
                /**
                 * menampilkan pesan "Menutup koneksi...."
                 */
                System.out.println("\n* Menutup koneksi....*");
                /**
                 * menutup koneksi
                 */
                link.close();
            } catch (IOException e) {
               /**
                * menampilkan pesan "Tidak dapat menutup koneksi!"
                */
                System.out.println("Tidak dapat menutup koneksi!");
                /**
                 * perintah untuk keluar dari program
                 */
                System.exit(1);
            }
      }
    }
}


*Program sisi client untuk single-line text echo*


import java.io.*;
import java.net.*;

/**
 * applikasi ini adalah applikasi client yang mengirim string ke applikasi server dan menerima string tersebut dari applikasi server, dimana applikasi ini menggunakan protocol TCP / transmission control protocol
 * @author Muhammad Luthfi Kasim P2700211436
 */
public class TCPEchoClient {
   /**
    * Deklarasi variabel statik socket dan port
    */
    private static InetAddress host;
    private static final int PORT = 1234;

    /**
     * prosedur utama dari applikasi
     * @param args
     */
    public static void main(String[] args) {
        try {
            /**
             * mendapatkan ip address dari server localhost
             */
            host = InetAddress.getLocalHost();
        }
        catch (UnknownHostException e) {
            /**
             * menampilkan pesan "ID Host tidak ditemukan" jika IP Address localhost
             */
            System.out.println("ID Host tidak ditemukan");

            System.exit(1);
        }
        /**
         * jalankan prosedur run jika berhasil mendapatkan IP Address localhost
         */
        run();
    }

    /**
     * Prosedur ini membuka socket berdasarkan IP Address dan port
     */
    private static void run(){
        /**
         * deklarasi variabel link bertype socket
         */
        Socket link = null; //tahap 1.
        try {
            /**
             * inisialisasi variabel link
             */
            link = new Socket(host, PORT); //tahap 1.
            /**
             * inisialisasi variabel in untuk menerima pesan dari applikasi server
             */
            BufferedReader in = new BufferedReader(new InputStreamReader(link.getInputStream())); //tahap 2.
            /**
             * memindahkan isi pesan dari variabel in ke variabel out
             */
            PrintWriter out = new PrintWriter(link.getOutputStream(),true); //tahap 2.
            //set up stream for keyboard entry
            /**
             * menerima stream input dari interface keyboard
             */
            BufferedReader userEntry = new BufferedReader(new InputStreamReader(System.in));
            /**
             * deklarasi variabel pesan dan respon bertipe string
             */
            String pesan, respon;
            /**
             * menampilkan output ke pengguna hingga pengguna menuliskan pesan "***TUTUP***"
             */
            do {
                System.out.print("Tulis pesan: ");
                pesan = userEntry.readLine();
                out.println(pesan); //tahap 3.
                respon = in.readLine(); //tahap 3.
                System.out.println("\nServer> "+respon+"\n");
            } while (!pesan.equals("***TUTUP***"));

        } catch (IOException e) {
            e.printStackTrace();
        }
        /**
         * penutupan koneksi untuk mencegah kebocoran resource, dimana blok finally akan tetap dieksekusi meskipun terjadi permasalah pada blok try and catch
         */
        finally {
            try {
                /**
                 * menampilkan pesan "Menutup koneksi...."
                 */
                System.out.println("\n* Menutup koneksi...*");
                /**
                 * menutup koneksi
                 */
                link.close(); //tahap 4.
            } catch (IOException e) {
                /**
                * menampilkan pesan "Tidak dapat menutup koneksi!"
                */
                System.out.println("Tidak dapat menutup koneksi!");
                /**
                 * perintah untuk keluar dari program
                 */
                System.exit(1);
            }
      }
    }
}
TERIMA KASIH ATAS KUNJUNGAN SAUDARA
Judul: PEMROGRAMAN TCP SOCKET
Ditulis oleh Unknown
Rating Blog 5 dari 5
Semoga artikel ini bermanfaat bagi saudara. Jika ingin mengutip, baik itu sebagian atau keseluruhan dari isi artikel ini harap menyertakan link dofollow ke http://dua7an.blogspot.com/2013/12/pemrograman-tcp-socket.html . Terima kasih sudah singgah membaca artikel ini.

2 komentar :

Unknown mengatakan...

yang punya blog,,, dosen ane ternyata.... :D

Dawud Tan mengatakan...

permisi gan, saya ada sedikit tulisan mengenai protokol websocket dalam beberapa bahasa pemrograman berikut: http://datacomlink.blogspot.co.id/2015/11/implementasi-server-websocket-rfc-6455.html ditunggu feedback-nya ya gan, semoga menambah wawasan bersama.. terima kasih gan..

Posting Komentar

Tutorial SEO dan Blog support Online Shop Tas Wanita - Original design by Bamz | Copyright of All For Share .