Kamis, 13 Juni 2013

tugas mbo Apakah Rational Rose dan Notasi UML ?


Apakah Rational Rose dan Notasi UML ?

Rational rose
Rational Rose adalah tools pemodelan visual untuk pengembangan system berbasis objek yang handal untuk digunakan sebagai bantuan bagi para pengembang dalam melakukan analisis dan perancangan system. Rational rosemendukung permodelan bisnis yang membantu para pengembang memahami system secara komprehensif. Ia juga membantu analisis system dengan cara pengembang membuat diagram use case untuk melihat fungsionalitas system secara keseluruhan sesuai dengan harapan dan keinginan pengguna. Kemudian, ia juga menuntut pengembang untuk mengambangkan Interaction Diagram untuk melihat bagaimana objek-objek saling bekerjasama dalam menyediakan fungsionalitas yang diperlukan.
Dalam Rational rose, pemodelan adalah cara melihat system dari berbagai sudut pandang. Ia mencakup semua diagram yang dikenal dalam UML, actor-aktor yang terlibat dalam system, use-case, objek-objek, kelas-kelas, komponen-komponen, serta simpul-simpul penyebaran. Model juga mendeskripsikan rincian yang diperlukan system dan bagaimana ia akan bekerja, sehingga para pengembang dapat menggunakan model itu sebagai blue print untuk system yang akan dikembangkan.

UML
UML (Unified Modelling Language) adalah sebuah bahasa yang menjadi standar dalam industri untuk visualisasi, merancang dan mendokumentasikan system piranti lunak.

Seperti bahasa-bahasa lainnya,  UML mendefinisikan notasi dan  syntax/semantik. Notasi UML merupakan sekumpulan bentuk khusus untuk menggambarkan berbagai diagram piranti lunak. Setiap bentuk memiliki makna tertentu, dan UML syntax mendefinisikan bagaimana bentuk-bentuk tersebut dapat dikombinasikan. Notasi UML terutama diturunkan dari 3 notasi yang telah ada sebelumnya: Grady Booch OOD (Object-Oriented Design), Jim Rumbaugh OMT (Object Modeling Technique), dan Ivar Jacobson OOSE (Object-Oriented Software Engineering).

Sejarah UML sendiri cukup panjang. Sampai era tahun 1990 seperti kita ketahui puluhan metodologi pemodelan berorientasi objek telah bermunculan di dunia. Diantaranya adalah: metodologi booch [1],  metodologi coad [2], metodologi OOSE [3], metodologi OMT [4], metodologi shlaer-mellor [5], metodologi wirfs-brock [6], dsb. Masa itu terkenal dengan masa perang metodologi (method war) dalam pendesainan berorientasi objek. Masing-masing metodologi membawa notasi sendiri-sendiri, yang mengakibatkan timbul masalah baru apabila kita bekerjasama dengan group/perusahaan lain yang menggunakan metodologi yang berlainan.

Posisi UML

Tahapan pembangunan aplikasi berorientasi objek pada umunya bersifat iterative dan incremental. Proses pembangunan aplikasi dibagi menjadi beberapa siklus. Setiap kali satu situs selesai dilakukan, dilakukan evaluasi sebagai bahan untuk memulai siklus berikutnya. Beberapa siklus biasanya terdiri atas:

Tahap analisa permintaan
Tahap analisa desain
Tahap desain
Tahap Pengkodean.
Tahap implementasi
UML digunakan pada tahap analisa dan desain. Desain yang dihasilkan berupa diagram-diagram UML yang akan diterjemahkan menjadi kode program pada tahap pengkodean.

Konsep Dasar UML

Abstraksi konsep dasar UML yang terdiri dari structural classification, dynamic behavior, dan model management, bisa kita pahami dengan mudah apabila kita melihat gambar diatas dari Diagrams. Main concepts bisa kita pandang sebagai term yang akan muncul pada saat kita membuat diagram. Dan view adalah kategori dari diagaram tersebut.

Lalu darimana kita mulai ? Untuk menguasai UML, sebenarnya cukup dua hal yang harus kita

perhatikan:

1.  Menguasai pembuatan diagram UML

2.  Menguasai langkah-langkah dalam analisa dan pengembangan dengan UML

Tulisan ini pada intinya akan mengupas kedua hal tersebut.

Seperti juga tercantum pada gambar diatas UML mendefinisikan diagram-diagram sebagai berikut:

use case diagram
class diagram
statechart diagram
activity diagram
sequence diagram
collaboration diagram
component diagram
deployment diagram
Diagram UML

UML menyediakan 10 macam Dalam UML merupakan salah satu alat Bantu yang sangat handal dalam mengembangkan system berorientasi objek. Ada 9 jenis diagram yang ditangani oleh UML, yakni:

1. Diagram Use Case

Use case adalah deskripsi fungsi dari sebuah dari sudut pandang pengguna. Use case bekerja dengan cara mendeskripsikan tipikal interkasi antar user (pengguna) sebuah system dengan system itu sendiri dan menjelaskan bagaimana system itu bekerja.

2. Diagram Class

Class diagram adalah sebuah spesifikasi yang jika diinstansiasi maka akan menghasilkan objek yang merupakan inti dari pengembangan dan desain berorientasi objek. Kelas menggambarkan atribut atau properti dari sebuah system sekaligus menawarkan layanan apa saja yang bisa dilakukan dengan objek tersebut (method/fungsi). Jadi, kelas memiliki 3 pokok penting yaitu: nama, atribut dan method.

3. Diagram Statechart

Statechart diagram menunjukkan transisi dan perubahan keadaan suatu objek pada system sebagai akibat dari stimulasi yang diterima. Dalam UML, state digambarkan berbentuk segi empat dengan sudut tumpul dan memiliki nama sesuai dengan kondisi saat itu.

4. Diagram Activity

Actifity diagram menggambarkan berbagai alir aktifitas dalam system yang sedang dirancang, bagaimana masing-masing alir berawal, decision yang mungkin terjadi dan bagaimana mereka berakhir. Activity diagram juga dapat menggambarkan proses parallel yang mungkin erjadi pada beberapa eksekusi.

5. Diagram Sequence

Sequence diagram digunakan untuk menggambarkan perilaku pada sebuah sekenario. Diagram ini menunjukkan sejumlah contoh objek dan message (pesan) yang diletakkan di antara objek-objek ini di dalam use case.

6. Diagram Collaboration

Collaboration diagram adalah perluasan dari objek diagram. Objek diagram menunjukkan objek-objek dan hubungannya dengan yang lain. Collaboration diagram menunjukkan message-message objek yang dikirim satu sama lain,

7. Diagram Component

Component Diagram menggambarkan struktur dan hubungan antar komponen piranti lunak, termasuk ketergantungan di antaranya.

8. Diagram Deployment.

Deplaoyment diagram menggambarkan detail bagaimana komponen di-deploy dalam infrastruktur system, dimana komponen akan diletakkan (pada mesin, server atau piranti keras apa), bagaimana kemampuan jaringan pada lokasi tersebut, spesifikasi server dan hal-hal lain yang bersifat fisikal.

Tool Pembuatan UML

Banyak sekali tool-tool yang didesain untuk mendukung UML,mulai dari yang gratis maupun komersial. Di antaranya yaitu:

Komersial:

Rational Rose
Object Domain
Magic Draw
Visio


Argo UML: Tool sederhana ini dapat membuat membantu kita untuk merancang perangkat lunak yang akan dibangun. Tool ini cocok untuk bagi yang baru belajar UML, karena fitur-fiturnya sangat terbatas.
FrameUML: Menurut saya tool ini agak kurang userfriendly karena sangat sederhana dan tidak meng-cover semua kebutuhan yang diperlukan dalam pembuatan UML.
Net Beans: Tool ini sangat kompleks, karena tidak hanya UML yang ada didalamnya, tapi BaseIDE, JavaME, JavaSE, SOAP, Ruby,C++ termasuk webserver Apache Tomcat. Maka dari itu tool ini sangat berat dan memakan memori yang cukup banyak

UAS (DIAGRAM UML GAME DOMINO)

USE CASE DIAGRAM

ACTIVITY DIAGRAM START GAME
ACTIVITY DIAGRAM PLAY GAME
 CLASS DIAGRAM
 Sequence Diagram

PLAY GAME
START GAME

diagram sistematik




Description: https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjstpHwCdlkm_0f4MZad9_LBsE_YfQCsJaNxeSXBP15PNm5Av6FfA6KuhvbuuKb1gQLabLhuTsjJULQLatssAQV6m5nVWFGBIxKYF9LET3S5LHuf-tP2U2UVC4Q96iw5wuBmSz64rVGiVg/s1600/2363315995_172d63bff4.jpg


Terkadang kita bingung ketika akan memulai sesuatu dan membayangkan hasil akhir dari suatu pekerjaan yang sudah dimulai. Tidak jarang pula kita kebingungan di tengah jalan akibat kesalahan prediksi proses yang sedang dibangun di tengah jalan. Ketika kita sedang menulis sering pula kehilangan ‘flow ’cerita yang sedang kita buat hingga akhirnya selesai dengan tulisan yang kurang terarah pada hasil akhir yang sebelumnya dibayangkan.
Saya pernah membaca buku tentang System Thinking (lupa judul bukunya)pada buku tersebut dijelaskan bahwa penyelesaian suatu masalah dapat kita modelkan dalam suatu pemikiran sistemik. Seperti pada diagram blok di atas, kita dapat memodelkannya kedalam inputsystem, dan output.Input di sini adalah masalah sedangkan output -nya adalah penyelesaian masalah. Di dalam system kita memproses informasi dari input untuk kemudian disesuaikan agar diperoleh  output yang diinginkan. Artinya sebelum memulai penyelesaian masalah harus didefinisikan terlebih dahulu input dan output-nya. Dengan demikian kita mempunyai gambaran jelas tentang permasalahannya dan bisa membayangkan hasil akhirnya. Barulah kemudian mendesain sebuah sistem untuk mencapai hasil akhir yang diinginkan. 



Description: https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgiZY77dJU5aU6PpVDvuHr5TiDC-61B_3AXclfaI76lQuoEXv8k5HQwbjcqKyqCvog2119vAHivZWfGiMs9yfjJKImJmgfAnN4srQY4QU1Gs6DiToF-f4Zrr0WJDP4oTfWXqsJaTl3VqI4/s1600/2365373291_bae9e531be.jpg


Di dalam blok sistem sendiri, kita bisa membaginya kembali ke dalam beberapa blok yang saling terhubung satu sama lain membentuk sebuah proses yang saling terikat (seperti gambar di atas). Masing-masing blok itu pun terdiri dari inputoutput, dan blok system. Dengan kata lain ada sistem di dalam sistem, yang apabila blok di dalam sistem tersebut masih memiliki proses yang kompleks, dapat dipecah lagi menjadi beberapa blok sampai diperoleh urutan proses input –> system –> output yang lebih sederhana. Proses pemecahan ini terjadi secara rekursif dan tergantung kepada kompleksitas sistem yang dibuat.
Pemodelan sistem ini dalam dunia rekayasa bisa disetarakan dengan standar formal dari abstraction language dimana dewasa ini telah dikenal adanya UML (Unified Modelling Language) atau SDL (Specification Description Language). Abstraction Language tersebut adalah layer teratas ketika kita mengembangkan suatu sistem sebelum implementasi dengan bahasa pemrograman di layer yang lebih rendah. Selain itu pemahaman dan pendekatan sistem juga jauh lebih mudah dengan model definisi formal seperti itu.
Sejatinya konsep berpikir ini bisa digunakan secara luas diberbagai bidang ilmu, karena sistem berpikir secara sistemik seperti ini mampu mendifinisikan masalah dengan baik serta membantu untuk tetap fokus pada tujuan akhir yang ingin dicapai. Contohnya adalah ketika kita ingin membuat suatu tulisan, apabila kita menerapkan metode berpikir seperti ini langkah pertama yang kita lakukan adalah menetapkan langkah awal tulisan dan juga menetapkan hasil akhir dari tulisan yang kita buat. Apabila input dan output nya sudah jelas, maka dalam menulis kita bisa tetap menjaga flow tulisan sampai akhir. Selain mempermudah hal ini juga akan meningkatkan kualitas dari sistem apapun yang kita buat.

Senin, 10 Juni 2013

use case diagram perekaman informasi untuk kepentingan negara (tugas)

perekamaninformasi

use case diagram login/logout

loginlogout

praktek membangun aplikasi client-server dengan metode rmi di java

5 juni 2013
Buat Projek untuk client server di netbeans, seperti berikut, :
package com.echo.clientserver.sayhello.server;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
/**
 *
 * @author dodis
 */
public class Main {
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws RemoteException {
        Registry registry = LocateRegistry.createRegistry(1099);
        sayHelloServer sayHello = new sayHelloServer();
        registry.rebind(“sayHello”, sayHello);
        System.out.println(“server telah berjalan (you should run)”);
        // TODO code application logic here
    }
}
masih dalam satu projek buat lagi file dengan nama SayHelloServer.java, berikut codingnya:
package com.echo.clientserver.sayhello.server;
import com.echo.clientserver.sayhello.SayHello;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
/**
 *
 * @author dodis
 */
public class sayHelloServer extends UnicastRemoteObject implements SayHello{
    
    public sayHelloServer() throws RemoteException{
    }
    public String sayHello(String nama) throws RemoteException{
           System.out.println(“Client Dengan Nama “+nama+”Melakukan Request”);
           return “Hello “+nama;
    }
}
Buat projek untuk clientnya, buat dengan java gui berikut design dan codingnya:
guiclient
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package com.echo.clientserver.sayhello.client;
import javax.swing.SwingUtilities;
/**
*
* @author dodis
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
SwingUtilities.invokeLater(new Runnable(){
public void run(){
FormClient client = new FormClient();
client.setVisible(true);
}
});
}
}
Buatlah projek lagi untuk RMI nya:
package com.echo.clientserver.sayhello;
import java.rmi.Remote;
import java.rmi.RemoteException;
/**
*
* @author dodis
*/
public interface SayHello extends Remote {
public String sayHello(String nama) throws RemoteException;
}
Kemudian Jalankan Server terlebih dahulu
serveron


lalu jalankan clientnya, dan inputkan nama anda, maka akan muncul respon dari server.
last
last2

multi thereading

Multithreading mengacu kepada dua atau lebih task (tugas, thread) yang berjalan (sedang dieksekusi) di dalam satu program. Thread merupakan suatu path eksekusi independen di dalam program. Banyak thread dapat nerjalan secara konkuren (berbarengan) di dalam program. Setiap thread di dalam Java dibuat dan dikendalikan oleh kelas java.lang.Thread. Suatu program Java dapat mempunyai banyak thread, dan thread-thread ini dapat berjalan secara bersamaan, secara asinkron atau sinkron.
Multithreading mempunyai beberapa keuntungan, dibandingkan multiprocessing, di antaranya:

  • Thread bersifat lightweight, sedangkan proses lebih berat. Perlu diketahui bahwa proses adalah program yang sedang berada di memory atau processor, sedang dieksekusi. Thread dapat diartikan sebagai anak dari proses.
  • Thread-thread berbagi pakai ruang alamat yang sama dan karena itu dapat berbagi pakai data dan kode (instruksi)
  • Context switching antar thread biasanya lebih murah daripada antar proses.
  • Biaya komunikasi antar thread relatif lebih rendah daripada komunikasi antar proses.
  • Thread memungkinkan task-task berbeda dikerjakan secara konkuren.
Note: Penjelasan lebih detail mengenai konsep thread dan proses dapat dibaca pada buku teks mengenai Sistem Operasi, di antaranya karya Stallings dan Tanenbaum yang banyak digunakan di Universitas di Dunia.
Kelas Thread merupakan turunan dari kelas Object. Kelas Object sendiri mempunyai metode notify(), notifyAll() dan wait(), sedangkan kelas Thread menyediakan metode sleep() dan yield(). Metode-metode ini akan sering digunakan dalam pengelolaan aplikasi banyak thread.

Pembuatan Thread
Terdapat 2 (dua) cara membuat thread di dalam Java:
  • Mengimplementasikan interface Runnable (java.lang.Runnable)
  • Menurunkan (extend) kelas Thread (java.lang.Thread)
Mengimplementasikan Interface Runnable
Bentuk dasar (signature) dari interface Runnable adalah
1
2
3
public interface Runnable {
    void run();
}
Pada pendekatan ini, kita harus membuat sebuah kelas yang implementasi interface Runnable menggunakan kata kunci implements Runnable. Kemudian dibuat instansiasi berupa suatu obyek dari kelas itu. Kita perlu meng-override metode run() di dalam kelas itu, satu-satunya metode yang perlu diimplementasikan. Metode run() mengandung logika dari thread yang dibangun.
Prosedur pembuatan thread berdasarkan pendekatan interface Runnable adalah sebagai berikut:
  1. Sebuah kelas meng-implements interface Runnable, menyediakan metode run() di dalamnya yang akan dieksekusi oleh thread nantinya. Obyek dari kelas ini merupakan obyek Runnable.
  2. Obyek dari kelas Thread dibuat dengan melewatkan obyek Runnable sebagai argumen ke konstruktur Thread. Obyek Thread sekarang mempunyai suatu obyek Runnable yang mengimplementasikan metode run().
  3. Metode start() pada obyek Thread yang dibuat sebelumnya dipanggil. Metode start() tersebut kembali segera setelah suatu thread dilahirkan (berhasil dibuat).
  4. Thread berakhir ketika metode run() berakhir, baik dengan penyelesaian normal atau dengan melempar suatu eksepsi tidak tertangkap (uncaught exception).
Di bawah ini adalah sebuah program yang mengilustrasikan pembuatan thread menggunakan interfaca Runnable, bukan meng-extend kelas Thread. Suatu thread dimulai ketika kita memanggil metode start() pada obyek yang dibuat.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
class RunnableThread implements Runnable {
    Thread runner;
    public RunnableThread() {   }
    public RunnableThread(String threadName) {
        runner = new Thread(this, threadName); // (1) Buat thread baru.
        System.out.println(runner.getName());
        runner.start(); // (2) Memulai eksekusi thread tersebut.
    }
    public void run() {
        //Tampilkan info tentang thread ini
        System.out.println(Thread.currentThread());
    }
}
public class RunnableExample {
    public static void main(String[] args) {
        Thread thread1 = new Thread(new RunnableThread(), "thread1");
        Thread thread2 = new Thread(new RunnableThread(), "thread2");
        RunnableThread thread3 = new RunnableThread("thread3");
        //Memulai eksekusi thread.
        thread1.start();
        thread2.start();
        try {
            //delay selama satu detik (1000 ms).
            Thread.currentThread().sleep(1000);
        } catch (InterruptedException e) {   }
        //Tampilkan info tentang thread main (utama).
        System.out.println(Thread.currentThread());
    }
}
Keluaran dari Program di atas dapat berupa:
thread3
Thread[thread1,5,main]
Thread[thread2,5,main]
Thread[thread3,5,main]
Thread[main,5,main]private
Pendekatan ini harus digunakan jika kelas yang menginstansiasi obyek thread diperlukan (sebagai parent) untuk membuat kelas-kelas lain yang merupakan keturunannya. Pada kasus demikian, kita tidak boleh menurunkan kelas Thread, harus mengimplementasikan Runnable.
Meng-Extend Kelas Thread
Prosedur pembuatan thread melalui pendekatan penurunan kelas Thread adalah sebagai berikut:
  1. Membuat sebuah sub-kelas turunan dari kelas Thread, kemudian meng-override metode run() dari kelas Thread dan di dalamnya didefinisikan beberapa kode yang dieksekusi oleh thread.
  2. Sub-kelas ini dapat memanggil suatu konstruktur Thread secara eksplisit untuk menginisialisasi thread, menggunakan metode super().
  3. Metode start() yang telah diturunkan (secara otomatis) dari kelas Thread dipanggil agar thread segera berjalan.
Berikut ini adalah sebuah program yang mengilustrasikan pembuatan thread dengan meng-extend kelas Thread sebagai ganti mengimplementasikan interface Runnable. Metode start() digunakanuntuk mengeksekusi obyek thread yang dibuat.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
class XThread extends Thread {
    XThread() {  }
    XThread(String threadName) {
        super(threadName); // Memulai thread.
        System.out.println(this);
        start();
    }
    public void run() {
        //Tampilkan info tentang thread ini
        System.out.println(Thread.currentThread().getName());
    }
}
public class ThreadExample {
    public static void main(String[] args) {
        Thread thread1 = new Thread(new XThread(), "thread1");
        Thread thread2 = new Thread(new XThread(), "thread2");
        // 2 thread diberikan nama default
        Thread thread3 = new XThread();
        Thread thread4 = new XThread();
        Thread thread5 = new XThread("thread5");
        //Memulai eksekusi thread
        thread1.start();
        thread2.start();
        thread3.start();
        thread4.start();
        try {
    //Metode sleep() dipanggil pada thred main (utama), delay 1 detik.
            Thread.currentThread().sleep(1000);
        } catch (InterruptedException e) {  }
        //Tampilkan info tentang thread main
        System.out.println(Thread.currentThread());
    }
}
Keluaran yang diperoleh dapat berupa:
Thread[thread5,5,main]
thread1
thread5
thread2
Thread-3
Thread-2
Thread[main,5,main]
Pada saat membuat thread, ada dua alasan mengapa kita mengimplementasikan interface Runnable, bukan meng-extend kelas Thread:
  • Menurunkan kelas Thread berarti bahwa subclass tidak dapat diturunkan menjadi kelas lain lagi, sedangkan suatu kelas yang mengimplementasikan interface Runnable mempunyai opsi ini.
  • Suatu kelas mungkin hanya diinginkan runnable, karena itu menurunkan Thread secara penuh merupakan pemborosan.
Contoh dari kelas anonim berikut memperlihatkan bagaimana membuat sebuah thread dan langsung menjalankannya:
1
2
3
4
5
6
( new Thread() {
   public void run() {
      for(;;) System.out.println(”Stop the world!”);
   }
}
).start();
Masih banyak fitur lain di Java yang dapat digunakan untuk mengelola thread. Insya Allah coba dibahas pada tulisan berikutnya.
Source: http://komputasi.wordpress.com

Minggu, 09 Juni 2013

uas pembuatan game domino dari game maker

Pembuatan Game menggunakan Game maker Versi 8.1
permainan Game domino sample.










 coding yang diterapkan dibagian
sprite
-kartu
-shadow



















tugas client server socket pada sistem client server

Socket pada sistem client server


Mengenal Socket

Bayangkan sebuah server game online yang berkomunikasi tanpa henti, dimainkan oleh entah berapa banyak client yang tersebar. Ini merupakan salah satu contoh aplikasi dari sekian banyak aplikasi yang menggunakan socket jaringan untuk saling berkomunikasi dan bertukar data.

Komunikasi socket jaringan memang tidak mengenal lelah, pertukaran data terjadi terus-menerus dan memegang peranan vital. Jika oleh karena suatu hal komunikasi berhenti karena maintenance, kerusakan, ataupun sebab lainnya, maka dapat dipastikan para penggunanya akan kecewa.

Maka dari itu, komunikasi jaringan selalu diusahakan tidak terhenti. Demikianlah tugas berat yang harus dilakukan socket jaringan. Sebelum membahas lebih jauh, apakah sebenarnya pengertian socket itu?

Pengertian socket adalah interface pada jaringan yang menjadi titik komunikasi antarmesin pada Internet Protocol, dan tentunya tanpa komunikasi ini, tidak akan ada pertukaran data dan informasi jaringan.

Socket terdiri dari elemen-elemen utama sebagai berikut:

1. Protokol.

2. Local IP.

3. Local Port.

4. Remote IP.

5. Remote Port.

Dalam komunikasi antara dua pihak, tentunya harus digunakan kesepakatan aturan dan format yang sama agar komunikasi dapat dimengerti. Seperti halnya dua orang yang menggunakan bahasa yang sama, maka bahasa di sini berfungsi sebagai protokol. Protokol yang digunakan dalam socket dapat menggunakan TCP ataupun UDP.

Contoh komunikasi sederhana adalah komunikasi antara komputer A dan komputer B. Baik komputer A maupun komputer B harus memiliki identitas unik, yang direpresentasikan oleh IP masing-masing.

Komunikasi yang terjadi melalui port, sehingga baik komputer A maupun komputer B harus memiliki port yang dapat diakses satu sama lain.

TCP dan UDP

Pemrograman socket adalah cara untuk menggunakan komponen/API (Application Programming Interface) socket untuk membuat sebuah aplikasi.

Aplikasi socket umumnya terdiri dari dua kategori berdasarkan pengiriman datanya, yaitu:

1. Datagram socket (menggunakan UDP).

2. Stream socket (menggunakan TCP).

Terdapat perlakuan yang berbeda antara UDP dan TCP, walaupun sama-sama berfungsi sebagai protokol pertukaran data.

UDP tidak memerlukan proses koneksi terlebih dahulu untuk dapat mengirimkan data, paket-paket data yang dikirimkan UDP bisa jadi melalui rute yang berbeda-beda, sehingga hasil yang diterima bisa jadi tidak berurutan.

Contohnya jika aplikasi socket pengirim mengirimkan berturut-turut pesan 1, pesan 2, dan pesan 3, maka aplikasi socket penerima belum tentu mendapatkan pesan yang berurutan dimulai dari pesan 1, pesan 2, dan terakhir pesan 3. Bisa saja pesan 2 terlebih dulu diterima, menyusul pesan-pesan yang lain, atau berbagai kemungkinan lainnya. Bahkan, dapat terjadi pesan yang dikirimkan tidak sampai ke penerima karena kegagalan pengiriman paket data.

Tidak demikian halnya dengan stream socket yang menggunakan TCP. Jenis ini mengharuskan terjadinya koneksi terlebih dahulu, kemudian mengirimkan paket-paket data secara berurutan, penerima juga dijamin akan menerima data dengan urutan yang benar, dimulai dari data pertama yang dikirimkan hingga data terakhir. TCP dapat menangani data yang hilang, rusak, terpecah, ataupun terduplikasi.

Dari sekilas perbedaan ini, kita dapat menarik kesimpulan bahwa aplikasi socket yang menggunakan TCP memerlukan pertukaran data dua arah yang valid. Sedangkan, aplikasi socket yang menggunakan UDP lebih memprioritaskan pada pengumpulan data.

Karena itu aplikasi socket dengan TCP sering diterapkan untuk aplikasi chat, transfer file, ataupun transaksi-transaksi penting. Sedangkan aplikasi socket dengan UDP cocok diterapkan untuk aplikasi monitoring jaringan, game online, dan aplikasi-aplikasi broadcast.

Port

Salah satu elemen penting yang digunakan dalam aplikasi socket adalah port. Port merupakan sebuah koneksi data virtual yang digunakan aplikasi untuk bertukar data secara langsung.

Terdapat banyak port di dalam sebuah sistem komputer dengan fungsinya masing-masing. Sebagai contoh, dalam mengirim e-mail digunakan service SMTP yang umumnya menggunakan port 25. Sementara service POP3 untuk menerima e-mail menggunakan port 110, port 80 digunakan untuk HTTP, port 443 digunakan untuk HTTPS, dan seterusnya.

Nomor-nomor port dikategorikan dalam tiga jenis sebagai berikut:

1. Well-known ports.

Merupakan port yang telah digunakan secara internal oleh sistem Windows, misalnya port untuk koneksi Internet, service FTP, dan seterusnya. Port yang telah digunakan ini adalah port 0 sampai dengan port 1023.

2. Registered ports.

Port ini dapat digunakan dalam aplikasi Anda, range-nya adalah port 1024 hingga port 49151, cukup banyak port yang tersedia yang bebas Anda pilih sehingga Anda tidak perlu kuatir kekurangan port untuk aplikasi Anda.

3. Dynamic/Private ports.

Dari port 49152 sampai dengan port 65535.

Winsock

Untuk pemrograman aplikasi socket berbasis Windows, maka komponen API yang sering digunakan adalah Winsock (Win-dows Socket API) yang mendukung interface standar TCP/IP, yang merupakan protokol jaringan paling popular saat ini (contoh protokol jaringan yang lain adalah NetBIOS, IPX dari Novell, AppleTalk dari Apple, dan seterusnya).

Pengertian TCP/IP (TCP over IP) mungkin dapat menjadi sedikit rancu jika diartikan TCP/IP hanya mengizinkan pengiriman TCP (dan tidak UDP), padahal seperti yang telah kita bahas, pengiriman socket dapat melalui TCP maupun UDP.

Pengertian TCP/IP di sini sebenarnya digunakan untuk menunjukkan teknologi jaringan/Internet, termasuk di dalamnya adalah UDP. Jika Anda menggunakan UDP, dapat juga disebut sebagai UDP/IP (UDP over IP), tetapi umumnya istilah ini jarang digunakan dan istilah TCP/IP telah mencakup, baik TCP maupun UDP.

Pada bahasa pemrograman visual seperti Visual Basic/Delphi, Anda dapat menggunakan control Winsock yang telah disediakan untuk mengembangkan aplikasi socket.

Walaupun kita akan mencontohkan aplikasi socket dalam environment Windows, Anda tidak perlu khawatir jika aplikasi socket yang menggunakan Winsock tidak dapat berkomunikasi dengan aplikasi socket berbasis Unix/Linux, karena komunikasi tetap dapat terjadi selama aplikasi tersebut menggunakan protokol jaringan yang sama.

Kalau demikian, untuk mencoba aplikasi socket, apakah mutlak diperlukan setidaknya jaringan dengan minimal dua komputer yang saling terkoneksi? Bagi Anda yang terpaksa hanya menggunakan satu komputer, dapat memanfaatkan alamat localhost atau 127.0.0.1 yang mengizinkan dua aplikasi berjalan pada satu mesin komputer dan berkomunikasi satu sama lain.

Aplikasi Server

Untuk membuat aplikasi socket yang sederhana, tidak diperlukan langkah-langkah yang rumit. Kita akan mencoba membuat dua buah aplikasi, yang pertama adalah aplikasi server yang akan menerima data, sedangkan aplikasi kedua adalah aplikasi client yang mengirimkan data pada server. Baik aplikasi server dan aplikasi client mendefi nisikan port yang sama sebagai jalur komunikasi.

Contoh program dibuat dengan menggunakan Visual Basic 6. Konsep pemrograman yang serupa juga dapat Anda implementasikan pada bahasa pemrograman lain seperti Visual Basic.NET, Delphi, dan lain sebagainya.

Kita akan memulainya dengan aplikasi server, tugas aplikasi server cukup sederhana, yaitu hanya siap sedia menerima data yang masuk pada sebuah port. Control yang Anda perlukan adalah control winsock bernama Winsock1 dan sebuah textbox bernama Text1. Pada event Form_Load, tuliskan kode program di bawah

ini:

Private Sub Form_Load()

With Winsock1

.LocalPort = 1025

.Listen

End With

End Sub

Kode program tersebut melakukan inisialisasi socket, socket memilih port 1025 pada komputer server dan menunggu data yang masuk melalui port tersebut dengan perintah Listen.

Selanjutnya pada event Winsock1_ConnectionRequest, ketikkan kode program berikut:

Private Sub Winsock1_ConnectionRequest(ByVal requestID As

Long)

If Winsock1.State <> sckClosed Then Winsock1.Close

Winsock1.Accept requestID

End Sub

Kode program di atas berfungsi untuk menerima request koneksi. Selanjutnya pada event Winsock1_DataArrival, ketikkan kode program berikut:

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)

Dim strData As String

Winsock1.GetData strData

Text1.Text = Text1.Text & strData

End Sub

Kode program di atas berfungsi untuk mengambil data yang diterima oleh socket dan menampilkannya pada Text1. Aplikasi server telah selesai!

Aplikasi Client

Seperti aplikasi server, Anda perlu menyiapkan control Winsock dan Text, ditambah sebuah control Command Button yang dapat Anda namakan cmdKirim yang berfungsi untuk mengirimkan data yang diketik pada Text1 ke aplikasi server.

Pada event Form_Load, ketikkan kode program di bawah:

Private Sub Form_Load()

With Winsock1

.RemoteHost = “127.0.0.1”

.RemotePort = 1025

.Connect

End With

End Sub

Kode program di atas berfungsi untuk melakukan inisialisasi, tentukan IP tujuan/server/remote dengan 127.0.0.1 seperti pada contoh jika Anda mencoba aplikasi ini dengan menggunakan satu mesin komputer.

Jika Anda mencobanya dengan menggunakan dua komputer dalam sebuah jaringan, isikan dengan IP komputer yang berfungsi sebagai server.

Selanjutnya pada cmdKirim, ketikkan kode program sebagai berikut:

Private Sub cmdKirim_Click()

If Winsock1.State = sckConnected Then

Winsock1.SendData Text1.Text

End If

End Sub

Kode program di atas akan mengirimkan pesan yang Anda ketik pada textbox Text1 pada aplikasi server.

Selesailah sudah aplikasi server dan client. Cukup mudah, bukan? Anda dapat melakukan uji coba dengan menjalankan aplikasi server pada komputer yang berfungsi sebagai server (ataupun komputer yang sama dengan aplikasi client jika Anda menggunakan 127.0.0.1 sebagai remote IP).

Jalankan aplikasi client, dan ketik kata-kata yang Anda inginkan, lalu tekan Command Button cmdKirim, maka aplikasi server akan menampilkan pesan yang Anda ketikkan

tersebut.

Dari program sederhana ini, Anda dapat mengembangkannya menjadi aplikasi socket yang sesuai dengan keperluan Anda, penggunaannya sangat luas dan bisa jadi sangat bermanfaat, misalnya aplikasi instant messenger seperti Yahoo! Messenger ataupun MSN Messenger yang merupakan aplikasi socket yang banyak digunakan.

Pengolahan Data

Komunikasi data antara server dan client di atas merupakan bentuk komunikasi satu arah sederhana. Data yang dikirimkan dari client pun merupakan data mentah yang tidak memerlukan pengolahan data lebih lanjut.

Anda dapat membuat sendiri function dan rutin untuk mengolah data yang dikirim dan diterima sesuai dengan kebutuhan aplikasi, karena data yang dikirimkan antarmesin bisa jadi sangat bervariasi.

Misalnya saja aplikasi server/client Anda memerlukan pertukaran data identitas mesin, tanggal, jam, header pesan, isi pesan, dan lain sebagainya. Anda dapat mengirimkannya dalam format tertentu, misalnya bentuk string dengan karakter pemisah untuk membedakan masing-masing field.

Dalam komunikasi data di dalam jaringan, Anda perlu mempertimbangkan besarnya data yang lalu-lalang pada jaringan, baik dengan menggunakan TCP maupun UDP. Keduanya harusdipersiapkan untuk mampu menangani data yang besar jika memang pengguna aplikasi socket Anda sangat luas.

Pastinya tidak terdapat masalah yang berarti jika Anda mencobanya dengan dua atau beberapa komputer dalam sebuah jaringan lokal, tetapi coba bayangkan seberapa besar total data yang harus dikirim dan diterima pada sebuah aplikasi game online, misalnya.

Pada contoh game online, sebuah server harus dipersiapkan untuk mampu melayani sedemikian banyak client, dan jaringan yang digunakan bukan lagi jaringan lokal, tetapi sudah merupakan jaringan Internet, di mana siapapun dapat menggunakan aplikasi Anda selama ia memiliki koneksi Internet.

Mungkin Anda bertanya, jika data yang keluar-masuk memerlukan pengolahan lebih lanjut, mengapa tidak digunakan database, sehingga Anda tidak perlu pusing membuat rutin atau modul untuk mengolah data yang dikirim/diterima melalui komunikasi socket?

Pada umumnya, aplikasi socket client/server memang menggunakan database pada sisi server, tetapi jika aplikasi socket mengharuskan sisi client menggunakan database tertentu, maka akan membatasi penggunaan aplikasi itu sendiri.

Selain itu, kegunaan komunikasi socket adalah agar dapat berjalan lintas platform. Tidak peduli operating system apa yang digunakan pengguna aplikasi, komunikasi socket tetap berjalan selama digunakan protokol yang sama.