Pemrograman Socket menggunakan UDP Wiranti Sri Utami
[email protected]
Abstrak UDP (User Datagram Protokol) merupakan sebuah jenis protokol transfer data yang terbilang sederhana, dikarenakan UDP mempunyai karakteristik connectionless (tidak berbasis koneksi). Data yang dikirimkan menggunakan protokol UDP didalamnya berbentuk packet yang tidak harus melakukan call setup seperti pada TCP. Selain itu, data dalam protokol UDP akan dikirimkan sebagai sebuah datagram. Dikarenakan UDP merupakan protokol yang connectionless (tidak berbasis koneksi) maka server tidak perlu membuat objek socket untuk setiap client, dan untuk mengirimkan data menggunakan UDP diperlukan datagram packet dan datagram socket yang dapat melakukan koneksi untuk menerima dan mengirimkan packet dari dan ke berbagai host. Implementasi UDP dalam java tidak menggunakan serversocket dan socket, melainkan menggunakan datagram packet dan datagram socket. Dengan datagram packet dan datagram socket maka alamat tujuan sudah terdapat dalam packet, dan socket hanya diperlukan untuk mengetahui local port mana yang listen dan yang mengirimkan. Pada pemrograman socket menggunakan UDP dapat melakukan koneksi lebih dari satu remote host, dan socket tidak didedikasikan sebagai sebuah single connection seperti TCP.
Kata Kunci : socket, UDP
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
Pendahuluan Pada artikel ini akan membahas mengenai pemrograman socket menggunakan UDP dan untuk pemrograman socket menggunakan TCP sudah dibahas pada artikel sebelumnya yang berjudul “pemrograman socket menggunakan TCP”. Tujuan penulisan artikel ini agar pembaca dapat mengenal pemrograman socket menggunakan UDP. Kemudian manfaat yang didapat pembaca dalam membaca artikel ini yaitu pembaca tidak hanya mengenal pemrograman socket menggunakan UDP akan tetapi pembaca dapat membuat sebuah aplikasi client server sederhana menggunakan UDP. Pada bab pembahasan akan dibahas lebih lanjut mengenai pemrograman socket menggunakan UDP dan langkahlangkah membuat aplikasi client server sederhana menggunakan UDP. Pada penulisan artikel ini penulis membuat aplikasi client server menggunakan UDP dengan bahasa pemrograman Java dan menggunakan editor notepad++. Penulis berharap semoga dengan adanya artikel ini menjadi langkah awal demi terwujudnya generasi muda yang memiliki pengetahuan yang luas seperti dalam bidang teknologi komputer sehingga dengan pengetahuan dan wawasan yang luas generasi muda dapat bersaing dengan negara-negara maju.
Pembahasan Java pemrograman
menyediakan socket.
pemrograman
Dalam
jaringan
pemrograman
yang
socket
didalamnya
dapat
dibangun
terdapat dengan
menggunakan dua model paket yaitu TCP (Transmission Control Protocol) dan UDP (User Datagram Protocol). Perbedaan antara protokol TCP dan UDP terdapat pada karakteristik dari kedua protokol tersebut, dimana protokol TCP memiliki karakteristik sebagai protokol yang berorientasi koneksi (connection oriented) sedangkan pada protokol UDP memiliki karakteristik connectionless (tidak berbasis koneksi). UDP ( User Datagram Protocol) adalah jenis transfer data yang lain dari TCP. UDP mempunyai karateristik connectionless (tidak berbasis koneksi). Dengan kata lain, data yang dikirimkan dalam bentuk packet tidak harus melakukan call setup seperti pada Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
TCP. Selain itu, data dalam protokol UDP akan dikirimkan sebagai datagram tanpa adanya nomor identifier. Sehingga kemungkinan data sampai tidak berurutan dan sangat mungkin hilang atau rusak dalam perjalananan dari host asal ke host tujuan. Tergantung pada host penerima atau tujuan, apakah akan meminta kembali pakcet yang rusak atau hilang. Kelebihan UDP adalah pada saat digunakan pada lightweight protokol, seperti pada DNS (Domain Name Service). Selain itu protokol UDP lebih fleksibel seperti contoh berikut, apabila terjadi kemacetan pada salah satu bagian jaringan, maka datagram dapat dialihkan untuk menghindari bagian yang mengalami kemacetan tersebut. Kemudian apabila sebuah simpul (node) mengalami kerusakan atau kegagalan, maka packet-packet berikutnya dapat menemukan jalan atau rute pengganti yang melewati simpul tersebut.
Datagram UDP Socket diciptakan dengan menggunakan class datagram socket yang menggunakan packet (dalam bentuk representasi object datagram packet) untuk melakukan send dan receive data. Jika dua buah program berkomunikasi menggunakan koneksi UDP, maka keduanya harus mempunyai koneksi datagram socket pada suatu port di komputer. Hal ini dapat ditangani dengan cara membuat object datagram socket, seperti contoh berikut ini : datagramSocket = new DatagramSocket();
Langkah-langkah membuat aplikasi client server sederhana menggunakan UDP Untuk dapat membuat sebuah aplikasi client server menggunakan UDP dibutuhkan hal-hal berikut ini : o Pastikan kita sudah menginstall jdk (java development kit). o Siapkan sebuah editor seperti notepad++ untuk dapat membuat sorce code untuk aplikasi client server sederhana menggunakan UDP.
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
Setelah itu kita membuat dua buah file source code diantaranya sebagai berikut : o Membuat file source code untuk sisi client dan nama file diberinama UDPClient.java o Membuat file source code untuk sisi server dan nama file diberinama UDPServer.java File bernama UDPClient.java menggunakan protokol UDP Berfungsi sebagai client dari UDPServer yang akan menjadi interface bagi user. Untuk memasukkan kata kunci yang telah disepakati sebelumnya, yaitu nama, nim, exit. Dan mengirimkan setiap pesan yang dimasukkan oleh user ke server, kemudian menampilkan jawaban yang dikirimkan server. Pada UDP client terdiri dalam 8 step, diantaranya sebagai berikut : Pertama dicheck apakah string yang dimasukkan oleh user sama dengan "exit", kalau sama maka akan langsung menuju step 8, akan tetapi kalau tidak dimulai dari step1. -
step 1 : Membuat datagram socket.
-
step 2: Membuat datagram packet outgoing. Ini merupakan packet datagram yang dikirimkan ke server.
-
step 3: Mengirimkan packet datagram yang telah di buat dalam step 2 ke server.
-
step 4: Membuat buffer untuk packet yang masuk.
-
step 5: Membuat datagram packet untuk packet yang masuk.
-
step 6: Menerima datagram yang masuk.
-
step 7: Memilah data dari datagram yang masuk. Kemudian menampilkan data isi/content.
-
step 8: Menutup koneksi ke server.
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
Berikut ini source code untuk sisi client dan nama file diberinama UDPClient.java import java.io.*; import java.net.*; import java.util.*; public class UDPClient { private static InetAddress host; private static final int PORT = 1234; private static DatagramSocket datagramSocket; private static DatagramPacket inPacket, outPacket; private static byte[] buffer; public static void main(String[] args) { try { host = InetAddress.getLocalHost(); } catch(UnknownHostException uhEx) { System.out.println("Host ID tidak ditemukan!"); System.exit(1); } accessServer(); } private static void accessServer() { try { //step 1 datagramSocket = new DatagramSocket(); //men set up stream untuk masukan dari keyboard... Scanner userEntry = new Scanner(System.in); String message="", response=""; System.out.println("Selamat Datang di d3ptzz's Client.\nSilahkan Masukkan kata kunci:\n NAMA : untuk melihat data nama.\n NIM : untuk melihat data NIM. \n EXIT : untuk keluar dari d3ptzz's Client. \n Kata kunci anda : "); do { message = userEntry.nextLine(); if (!message.equals("EXIT")) { outPacket = new DatagramPacket( message.getBytes(), message.length(), host, PORT); //Step 2. //Step 3... datagramSocket.send(outPacket); buffer = new byte[256]; //Step 4. inPacket = new DatagramPacket( buffer, buffer.length);//Step 5.
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
//Step 6... datagramSocket.receive(inPacket); response = new String(inPacket.getData(),0, inPacket.getLength()); //Step 7. System.out.println( "SERVER> "+response); } } while (!message.equals("EXIT")); } catch(IOException ioEx) { ioEx.printStackTrace(); } finally { System.out.println( "\n* Menutup koneksi ke server... *"); datagramSocket.close(); //Step 8. } } }
File bernama UDPServer.java menggunakan protokol UDP Berfungsi sebagai server yang memiliki tugas untuk menerima koneksi dari client, kemudian apabila client memasukkan kata kunci, maka dicompare dengan string yang sudah ditentukan sebelumnya, yaitu nama, nim, kemudian memberikan output yang sesuai. Pada UDP server terdiri dalam 11 step, diantaranya sebagai berikut : -
step 1 : Membuat datagram socket.
-
step 2: Membuat buffer untuk packet yang masuk.
-
step 3: Membuat datagram packet untuk packet yang masuk.
-
step 4: Menerima datagram yang masuk.
-
step 5: Memilah data dari datagram yang masuk. Kemudian mengambil data address.
-
step 6: Memilah data dari datagram yang masuk. Kemudian mengambil data port.
-
step 7: Memilah data dari datagram yang masuk. Kemudian mengambil data isi.
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
-
step 8: Membandingkan isi datagram yang masuk dengan string yang sudah ditentukan sebelumnya, dan mengisi variable messageOut dengan string yang sesuai.
-
step 9: Membuat datagram untuk dikirimkan ke server berisi messageOut, adress client, port client.
-
step10: Mengirimkan datagram yang telah dibuat pada step 9 ke client.
-
step11: Apabila terjadi exception, maka koneksi akan diputus.
Berikut ini source code untuk sisi client dan nama file diberinama UDPServer.java import java.io.*; import java.net.*; public class UDPServer { private static final int PORT = 1234; private static DatagramSocket datagramSocket; private static DatagramPacket inPacket, outPacket; private static byte[] buffer; public static void main(String[] args) { System.out.print("Membuka Port...\n"); try { datagramSocket = new DatagramSocket(PORT); //Step 1. System.out.println("Berhasil membuka port!\n\nServer hidup. Menunggu koneksi dari klien!"); } catch(SocketException sockEx) { System.out.println("Tidak dapat membuka port!"); System.exit(1); } handleClient(); } private static void handleClient() { try { String messageIn,messageOut; int numMessages = 0; do { buffer = new byte[256]; //Step 2. inPacket = new DatagramPacket(buffer, buffer.length); //Step 3. datagramSocket.receive(inPacket);//Step 4.
Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
InetAddress clientAddress = inPacket.getAddress(); //Step 5. int clientPort = inPacket.getPort(); //Step 6. messageIn = new String(inPacket.getData(),0,inPacket.getLength()); //Step7. System.out.println("Message received : " + messageIn); numMessages++; //step 8........ if(messageIn.compareTo("NAMA")==0){ messageOut = "NAMA : WIRANTI SRI UTAMI"; } else if(messageIn.compareTo("NIM")==0){ messageOut = "NIM : 1122469122"; } else { messageOut="Kata kunci anda salah. Mohon ulangi kembali. ( NAMA / NIM / EXIT )"; // } outPacket = new DatagramPacket(messageOut.getBytes(), messageOut.length(), clientAddress, clientPort); //Step 9. datagramSocket.send(outPacket); //Step 10. } while (true); } catch(IOException ioEx) { ioEx.printStackTrace(); } finally //jika terjadi exception maka akan menutup koneksi. { System.out.println("\n* Menutup koneksi... *"); datagramSocket.close(); //Step 11. } } }
Penutup Didalam pemrograman socket terdapat dua dua model paket protokol yaitu TCP (Transmission Control Protocol) dan UDP (User Datagram Protocol). UDP (User Datagram Protocol) adalah jenis transfer data yang lain dari TCP. UDP mempunyai karateristik connectionless (tidak berbasis koneksi). Implementasi UDP dalam java Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org
tidak menggunakan serversocket dan socket, melainkan menggunakan datagram packet dan datagram socket. Demikianlah penulisan artikel ini dibuat, semoga artikel ini dapat menambah wawasan bagi pembaca dalam bidang pemrograman java. Penulis berharap semoga pembaca tidak hanya mengenal pemrograman socket menggunakan UDP tetapi dapat mencoba membuat sebuah aplikasi client server sederhana menggunakan UDP.
Referensi http://d3ptzz.kandangbuaya.com/2008/03/23/membuat-sebuah-aplikasi-server-clientsederhana-dengan-java/ http://dhealf.com/programming/pemrograman-socket-dengan-udp.html http://dhealf.com/programming/pemrograman-socket-dengan-tcp.html http://www.buyya.com/java/Chapter13.pdf https://dl.dropbox.com/u/41163754/source%20code/Java%20Client%20Server/source% 20code.rar
Biografi Wiranti Sri Utami. Lahir di Tangerang, pada bulan November. Telah menyelesaikan pendidikan dasar dan menengah di SD Negeri 2 Teluknaga dan SMP Negeri 1 Teluknaga. Menamatkan SMA di SMA Negeri 6 Tangerang pada tahun 2008. Menempuh pendidikan Profesional IT selama 2 tahun di CEP-CCIT FTUI (Continuing Education Program - Center for Computing Information Technology Faculty of Engineering - University of Indonesia), jurusan Software Engineering – Java Programming pada tahun 2008-2010. Saat ini wiranti bekerja di Lion Air Bandara Soekarno-Hatta sebagai Administrator dan melanjutkan kuliah S1 di STMIK Raharja mengambil jurusan Teknik Informatika, konsentrasi Software Engeenering. Informasi lebih lanjut dapat melalui email penulis :
[email protected] Lisensi Dokumen: Copyright © 2008-2014 ilmuti.org Seluruh dokumen di ilmuti.org dapat digunakan, dimodifikasi dan disebarkan secara bebas untuk tujuan bukan komersial (nonprofit), dengan syarat tidak menghapus atau merubah atribut penulis dan pernyataan copyright yang disertakan dalam setiap dokumen. Tidak diperbolehkan melakukan penulisan ulang, kecuali mendapatkan ijin terlebih dahulu dari ilmuti.org