5 BAB II DASAR TEORI 2.1. Java Java adalah bahasa pemrograman yang dapat dijalankan di berbagai komputer termasuk telepon genggam. Java merupakan bahasa pemrograman yang bersifat umum/non-spesifik (general purpose), dan secara khusus dirancang untuk memanfaatkan dependensi implementasi seminimal mungkin. Karena fungsionalitasnya yang memungkinkan aplikasi Java mampu berjalan di beberapa platform sistem operasi yang berbeda, Java dikenal pula dengan slogannya, “Tulis sekali, jalankan di manapun”. Tahap kompilasi: 1. Tulis/ubah. Pemrogram menulis program dan menyimpannya di media dalam bentuk berkas ‘.java’. 2. Kompilasi. Compiler membentuk bytecodes dari program menjadi bentuk berkas ‘.class’. 3. Muat. Pemuat kelas memuat bytecodes ke memori. 4. Verifikasi. Peng-verifikasi memastikan bytecodes tidak mengganggu sistem keamanan Java. 5. Jalankan. Penerjemah menerjemahkan bytecodes ke bahasa mesin [2]. Bahasa pemrograman Java menyediakan library-library standar yang telah di-compile dan dapat langsung digunakan dalam implementasi pembuatan sebuah aplikasi. Pada library, terdapat berbagai macam class yang dapat digunakan dan telah dikelompokkan di dalam package [2]. Dalam hal ini, penulis hanya akan membahas 2 package yaitu package IO (java.io) dan Network (java.net), yang mana Universitas Sumatera Utara 6 class-class pada kedua package ini merupakan komponen utama yang dipakai dalam pembuatan aplikasi lelang online berbasis Java. 2.1.1. Java.io Package java.io pada java class library menyediakan class-class yang mendukung untuk sistem input dan output melalui data stream, serialisasi dan sistem file [1]. 2.1.2. Java.net Package java.net menyediakan class untuk implementasi aplikasi network. Paket ini berisi kelas yang memperbolehkan program untuk berkomunikasi melalui jaringan. Package java.net dapat dibagi dalam 2 bagian, yaitu: A Low-Level API, yang berkaitan dengan masalah berikut: 1. Addresses, yaitu pengidentifikasian jaringan, seperti IP Addresses. 2. Sockets, yang merupakan dasar mekanisme data dua arah. 3. Interfaces, menggambarkan interface dari jaringan tersebut. A High-Level API, yang berkaitan dengan masalah berikut: 1. URI, yang mewakili Universal Resource Identifier. 2. URL, yang mewakili Universal Resource Locators. 3. Connections, yang merupakan koneksi ke sumber daya yang ditunjukkan oleh URL. Salah satu keunggulan Java adalah dukungannya terhadap pengembangan aplikasi multithread sebagai bagian terpadu bahasa Java. Java merupaka bahasa pemrograman yang pertama kali memiliki dukungan intensif operasi-operasi thread di bahasanya. Semantiks java.lang.object di mana semua instance merupakan Universitas Sumatera Utara 7 instance java.lang.object memiliki monitor locking terhadap objek atau metode (notify(), notifyAll(), wait()) hanya memiliki arti di konteks aplikasi multithreading. Java menyediakan kata kunci synchronized untuk mengendalikan perilaku di lingkungan multithreading [5]. 2.2. Thread Thread adalah prinsip yang memperbolehkan sebagian dari program untuk berjalan secara independen dengan berbagai program lainnya. Dalam threading dapat dijalankan beberapa pointer ataupun tugas/metode tertentu secara sekaligus [5]. Artinya dua atau lebih bagian dari kode dapat dijalankan secara simultan. Sebuah thread merupakan sebuah pengontrol aliran program. Dengan kata lain, thread menyatakan program komputer untuk melakukan lebih dari satu tugas di satu waktu yang sama. Sebelumnya perlu dibedakan antara thread dan proses. Thread dan proses sama-sama merupakan urutan kode yang dieksekusi. Pada Android, yang dasarnya adalah Linux, setiap aplikasi yang dijalankan berada di proses yang terpisah. Satu proses kemudian dapat memiliki satu atau lebih thread. Thread-thread di dalam proses yang sama berbagi memori, walaupun setiap thread punya register dan stack sendiri. Proses independen satu sama lain, sedangkan thread-thread pada proses yang sama saling terkait. Thread merupakan cara di Java untuk menjalankan banyak bagian secara kongruen. Thread merupakan lightweight process yang tidak banyak menghabiskan banyak overhead layaknya proses normal. Thread-thread dapat saling mengakses data. Pengaksesan memori bersama mempermudah komunikasi antar-thread, Universitas Sumatera Utara 8 namun menimbulkan permasalahan sinkronisasi pengaksesan data. Java menyediakan kata kunci synchronized untuk mengendalikan perilaku thread di lingkungan multithreading [5]. 2.3. Android Android adalah sistem operasi berbasis Linux yang dirancang untuk perangkat bergerak (mobile) layar sentuh seperti smartphone dan komputer tablet. Android merupakan sistem operasi yang opensource, dan Google merilis kodenya di bawah lisensi Apache. Kode opensource dan lisensi perizinan pada Android memungkinkan perangkat lunak untuk dimodifikasi secara bebas dan didistribusikan oleh para pembuat perangkat, operator nirkabel, dan pengembang aplikasi. Android merupakan subset perangkat lunak untuk perangkat mobile yang meliputi sistem operasi, middleware dan aplikasi inti yang dirilis oleh Google. Android dilengkapi dengan Android SDK (Software Development Kit) yang menyediakan tools dan mendukung kebutuhan API (Application Programming Interface) yang diperlukan untuk mengembangkan aplikasi pada platform Android dengan menggunakan bahasa pemrograman Java. Aplikasi Android ditulis dalam bahasa pemrograman Java, yaitu kode Java yang terkompilasi bersama-sama dengan data dan file resources yang dibutuhkan oleh aplikasi yang digabungkan oleh app tools menjadi paket Android, menjadi sebuah file yang ditandai dengan ekstensi ‘.apk’. File ini didistribusikan sebagai aplikasi dan diinstal pada perangkat mobile [4]. Universitas Sumatera Utara 9 2.3.1. Arsitektur Android Arsitektur Android diibaratkan seperti sebuah tumpukan software. Pendapat tersebut dikemukakan oleh Open Handset Alliance yang mengasuh Google sebagai pencipta Android, yang mana setiap lapisan dari tumpukan ini menghimpun beberapa program yang mendukung fungsi-fungsi spesifik dari sistem operasi. Pada Gambar 7.1 di bawah ini akan menggambarkan arsitektur Android dari setiap arasnya yang mana diibaratkan seperti tumpukan software. Gambar 2.1 Arsitektur Android Sumber: Android Anatomy and Physiology. Google I/O. 28 Mei 2008 Tumpukan paling bawah adalah kernel. Google menggunakan kernel Linux versi 2.6 untuk membangun Android, yang mencakup memory management, security setting, power management, dan beberapa driver hardware. Bertempat di level yang sama dengan library adalah lapisan runtime yang mencakup serangkaian inti library Java. Dengan ini, programmer dapat mengembangkan aplikasi untuk Universitas Sumatera Utara 10 Android menggunakan bahasa pemrograman Java. Lapisan selanjutnya adalah application framework, yang mencakup program untuk mengatur fungsi-fungsi dasar smartphone [3]. 2.3.2. Android SDK Android SDK mencakup seperangkat alat pengembangan yang komperhensif. Android SDK terdiri atas debugger, libraries, handset emulator, dokumentasi, contoh kode dan tutorial. Saat ini Android sudah mendukung arsitektur x86 pada Linux (distribusi Linux apapun untuk desktop modern), MacOS X 10.4.8 atau lebih, Windows XP atau Vista. Persyaratan mencakup JDK, Apache Ant dan Python 2.2 atau yang lebih baru. IDE yang didukung secara resmi adalah Eclipse 3.2 atau lebih dengan menggunakan plug-in Android Development Tools (ADT), dengan ini pengembang dapat menggunakan teks editor untuk meng-edit file Java dan XML serta menggunakan peralatan command line untuk menciptakan, membangun, melakukan debug aplikasi Android dan pengendalian perangkat Android (misalnya reboot, menginstal paket perangkat lunak dari jarak jauh) [3]. 2.4. Socket Socket adalah sebuah abstraksi perangkat lunak yang digunakan sebagai suatu “terminal” dari suatu hubungan antara dua mesin atau proses yang saling berinterkoneksi [6]. Socket adalah suatu class yang digunakan oleh aplikasi untuk saling berhubungan. Komunikasi socket terutama diciptakan untuk tujuan menjembatani komunikasi antara dua buah program yang dijalankan pada mesin yang berbeda. Namun tentu saja berarti dua program pada mesin yang sama juga dapat saling berkomunikasi. Universitas Sumatera Utara 11 Socket merupakan fasilitas IPC (Inter Process Communication) untuk aplikasi jaringan. Agar suatu socket dapat berkomunikasi dengan socket lainnya, maka socket perlu diberi suatu alamat unik sebagai identifikasi. Alamat socket terdiri atas Alamat IP dan Nomor Port. Contoh alamat socket adalah 192.168.29.30: 3000, di mana angka 3000 adalah nomor port-nya. Alamat IP dapat menggunakan alamat jaringan lokal (LAN) maupun alamat internet [6]. Jadi socket dapat digunakan untuk IPC pada LAN maupun internet. Logika dasar dari pemrograman socket adalah sebagai berikut: 1. Jika ada 2 node yang ingin berkomunikasi, maka mereka harus menentukan port mana yang akan digunakan untuk berkomunikasi dan membuka port tersebut melalui deklarasi socket. 2. Jika sudah membuka port untuk berkomunikasi, yang perlu dilakukan adalah membuat jalur untuk berkomunikasi yang menghubungkan kedua port tersebut. 3. Jalur tersebut terbagi atas: 1 jalur untuk client mengirim data. 1 jalur untuk client menerima data. 1 jalur untuk server mengirim data. 1 jalur untuk server menerima data. 4. Jika keempat jalur tersebut sudah dibuat, maka server dan client sudah dapat melakukan komunikasi. Jika komunikasi sudah selesai, client dapat menutup jalur-jalur komunikasi yang telah dibuat sebelumnya. Universitas Sumatera Utara 12 2.5. Alamat IP Alamat IP (Internet Protocol Address) adalah sederetan angka biner antara 32-bit sampai 128-bit yang dipakai sebagai alamat identifikasi untuk tiap komputer host dalam jaringan internet. Panjang dari angka ini adalah 32-bit untuk IPv4 (IP versi 4) dan 128-bit untuk IPv6 (IP versi 6) yang menunjukkan alamat pada komputer agar komputer dapat saling terhubung dengan komputer lain. IP Address terdiri dari 4 blok di mana setiap blok diisi oleh angka 0-255. Contoh IP Address seperti 192.168.100.1 adalah IPv4. 2.6. Port Dalam protokol jaringan TCP/IP, sebuah port adalah mekanisme yang mengizinkan sebuah komputer untuk mendukung beberapa sesi koneksi dengan komputer lainnya dan program di dalam jaringan [6]. Port dapat mengidentifikasi aplikasi dan layanan yang menggunakan koneksi di dalam jaringan TCP/IP. Sehingga, port juga mengidentifikasi sebuah proses tertentu di mana sebuah server dapat memberikan sebuah layanan kepada client atau bagaimana sebuah client dapat mengakses sebuah layanan yang ada dalam server. Port dapat dikenali dengan angka 16-bit (2 byte) yang disebut dengan Port Number dan diklarifikasi dengan jenis protocol transport apa yang digunakan ke dalam Port TCP dan Port UDP. Karena memiliki bilangan 16-bit, maka total maksimum jumlah port untuk setiap protocol transport yang digunakan adalah 65536 buah. 2.7. Paradigma Client/Server Paradigma client/server adalah dasar untuk framework jaringan Java. Tentunya, penetapan ini terdiri dari dua elemen besar, yakni client dan server [6]. Universitas Sumatera Utara 13 Client adalah mesin yang membutuhkan beberapa jenis informasi, sedangkan server adalah mesin yang menyimpan informasi dan menunggu untuk menyampaikannya pada client. Paradigma ini menjelaskan sebuah skenario sederhana. Tentunya, client terhubung dengan server dan meminta informasi. Kemudian server mengingat permintaan dan mengembalikan informasi yang tersedia kepada client. Gambar 2.2 Model Client/Server Sumber: JENI (Java Education Network Indonesia) Model komunikasi client-server adalah model komunikasi dua arah yang berjalan ketika client meminta sebuah layanan dari server. Model komunikasi client-server harus berjalan dengan aturan yang sama. Semua proses berjalan dua arah, client dan server saling berinteraksi, dan server hanya berjalan ketika client meminta layanan darinya. Universitas Sumatera Utara 14 Gambar 2.3 Model Komunikasi Client/Server Sumber: JENI (Java Education Network Indonesia) Gambar di atas adalah cara client dan server berkomunikasi. Secara sederhana, model komunikasi client-server adalah: 1. Pertama-tama, server berada dalam keadaan LISTEN. Dalam keadaan LISTEN ini, server menunggu dan siap menerima permintaan koneksi dari client. Dalam hal ini, server membuka port dengan nomor tertentu yang diketahui oleh client. Di sana ada service yang berjalan di pihak server atau ada daemon yang berjalan dan menunggu port tertentu di pihak server. 2. Hubungan antara client dengan server dimulai oleh client yang bertindak meminta suatu koneksi ke server. Paketnya berupa Request Connection pada gambar di atas. 3. Bila server menerima permintaan ini, server akan membalasnya dan memberitau client bahwa permintaannya diterima berupa Accept Universitas Sumatera Utara 15 Connection dari server seperti pada gambar di atas. Pada titik ini, koneksi antara client dan server sudah terjalin. 4. Setelah terjalinnya koneksi, client dapat mengirimkan data ke server. Begitu pula dengan sever boleh saling mengirimkan data antara satu dengan lainnya yang disebut Data Transfer. Setelah data selesai dikirim, client maupun server dapat saling mengakhiri koneksi tersebut. Hal ini dikatakan sebagi Close Connection seperti pada gambar di atas. Universitas Sumatera Utara