You are on page 1of 47

FINAL PROJECT SOCKET PROGRAMING APLIKASI CHATING

ARDHI GUNAWAN SUARSA 1008605029 GEDE NGURAH DUTA KRISNA MANDALA 1008605030 I WAYAN ADI WIRATAMA 1008605039

PROGRAM STUDI TEKNIK INFORMATIKA JURUSAN ILMU KOMPUTER


FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM

UNIVERSITAS UDAYANA 2012

KATA PENGANTAR

Om Swastyastu Puja dan puji syukur kita panjatkan kehadapan Ida Sang Hyang Widhi Wasa karena berkat rahmat-Nya penulis dapat menyelesaikan laporan Jaringan Komputer Lanjut yang berjudul Socket Programing : Aplikasi Chating. Penulis menyadari bahwa terdapat banyak kekurangan dalam modul yang dikerjakan, untuk itu kritik dan saran yang bersifat membangun dari para dosen mata kuliah Jaringan Komputer Lanjut sangatlah diharapkan untuk melengkapi kekurangan laporan yang dibuat. Semoga pikiran yang baik datang dari segala penjuru. Om Santhi Santhi Santhi Om Gianyar, 11 Desember 2012

Penulis

ii

DAFTAR ISI

KATA PENGANTAR ............................................................................................ ii DAFTAR ISI .......................................................................................................... iii DAFTAR GAMBAR .............................................................................................. v BAB I PENDAHULUAN ....................................................................................... 1 1.1 Latar Belakang........................................................................................... 1 1.2 Rumusan Masalah ..................................................................................... 1 1.3 Tujuan ........................................................................................................ 1 1.4 Manfaat ...................................................................................................... 2 BAB II LANDASAN TEORI ................................................................................. 3 2.1 Chating ...................................................................................................... 3 2.2 Socket ........................................................................................................ 3 2.2.1 Jenis Socket......................................................................................... 3 2.2.2 Socket Programming........................................................................... 5 2.2.3 Socket for Client ................................................................................. 8 2.2.4 Socket for Server ................................................................................ 9 2.3 Java .......................................................................................................... 10 2.3.1 Kompilasi dan Interpretasi ................................................................ 11 2.3.2 Elemen Bahasa Java.......................................................................... 12 2.3.3 Aturan Penamaan .............................................................................. 14 2.3.4 Kelas ................................................................................................. 16 2.3.5 Method .............................................................................................. 17 2.3.6 Object ................................................................................................ 17 BAB III PEMBAHASAN ..................................................................................... 19 3.1 Skenario Program .................................................................................... 19 3.1.1 Struktur Program ............................................................................ 19 3.1.2 Antarmuka Program ....................................................................... 20 3.1.3 Kebutuhan Sistem .......................................................................... 22 3.2 Demo Program ......................................................................................... 23 3.2.1 Persiapan Memulai Program ............................................................. 23 3.2.2 Menjalankan Program .................................................................... 24

iii

BAB IV PENUTUP .............................................................................................. 29 4.1 Kesimpulan .............................................................................................. 29 4.2 Saran ........................................................................................................ 29 DAFTAR PUSTAKA ........................................................................................... 30

iv

DAFTAR GAMBAR

Gambar 3. 1 Interface Login ................................................................................. 20 Gambar 3. 2 Interface Chat ................................................................................... 21 Gambar 3. 3 Mengaktifkan MySQL ..................................................................... 23 Gambar 3. 4 Penambahan tabel pada database ..................................................... 24 Gambar 3. 5 Menjalankan class main pada java ................................................... 24 Gambar 3. 6 Tampilan login dan register.............................................................. 25 Gambar 3. 7 Tampilan chating .............................................................................. 26 Gambar 3. 8 Membuka koneksi untuk teman ....................................................... 26 Gambar 3. 9 Admin membuka port berbeda ......................................................... 27 Gambar 3. 10 Dialog box untuk memasukkan IP dan port ................................... 27 Gambar 3. 11 Memasukkan nomor port ............................................................... 27 Gambar 3. 12 Memilih penerima pesan ................................................................ 28 Gambar 3. 13 Aktivitas Chating ........................................................................... 28

BAB I PENDAHULUAN

1.1 Latar Belakang Pada era yang semakin maju seperti sekarang ini, teknologi sudah berkembang semakin cepat. Penggunaan perangkat komputer sudah semakin akrab terhadap kehidupan sehari-hari. Banyaknya orang yang sudah mulai memakai media komputer membuat kini dibutuhkannya suatu jaringan komputer untuk membantu manusia melakukan pertukaran data atau informasi. Dalam melakukan komunikasi atau melakukan pengiriman atau penerimaan data dalam suatu jaringan khususnya berkirim pesan teks, kini telah dipermudah dengan adanya teknologi chatting Secara sederhana, chat dapat diartikan sebagai obrolan, namun dalam dunia internet, istilah ini merujuk pada kegiatan komunikasi melalui sarana beberapa baris tulisan singkat yang diketikkan melalui keyboard. Berdiskusi online dengan para pemakai jaringan lain dari salah satu dan seluruh bagian dunia

1.2 Rumusan Masalah Adapun rumusan masalah dari pembuatan laporan ini adalah : 1. Bagaimana peranan socket untuk menjalankan aplikasi chatting? 2. Bagaimana mekanisme chatting pada aplikasi java? 3. Bagaimana pengimplementasian socket yang digunakan tersebut dalam aplikasi chatting tersebut ?

1.3 Tujuan Tujuan dari pembuatan laporan Jaringan Komputer Lanjut ini adalah : 1. Mahasiswa dapat mengetahui program socket itu seperti apa dan bagaimana pengimplementasiannya di dalam sebuah aplikasi chatting.

1.4 Manfaat Manfaat dari pembuatan laporan Jaringan Komputer Lanjut ini adalah : 1. Mahasiswa bisa membuat sebuah program socket dan dapat mengimplementasikannya ke dalam sebuah aplikasi yang berkaitan dengan dunia internet khususnya aplikasi chatting.

BAB II LANDASAN TEORI

2.1 Chating Aplikasi chatting merupakan salah satu layanan yang disediakan Internet/ intranet untuk melakukan komunikasi dengan yang lainnya. Secara sederhana, chat dapat diartikan sebagai obrolan, namun dalam dunia internet, istilah ini merujuk pada kegiatan komunikasi melalui sarana beberapa baris tulisan singkat yang diketikkan melalui keyboard. Berdiskusi online dengan para pemakai jaringan lain dari salah satu dan seluruh bagian dunia. Tempat berkumpulnya kelompok untuk saling berkomunikasi dengan chat ini disebut dengan chat room. Chatting merupakan percakapan interaktif antar sesama pengguna komputer yang terhubung dalam suatu jaringan. Percakapan ini bisa dilakukan dengan saling berinteraktif melalui teks. 2.2 Socket Socket adalah salah satu cara untuk komunikasi antar komputer, umumnya lewatnetwork atau internet. Socket biasa digunakan untuk pemrograman berbasis client-server yang dapat menggunakan socket TCP/IP atau socket UDP. Socket dapatdibayangkan sebagai perangkat lunak yang digunakan sebagai suatu "terminal" dari suatu hubungan antara dua mesin atau proses yang saling berinterkoneksi.

2.2.1 Jenis Socket Ada dua golongan socket di Unix yang paling umum dipakai yaitu: 1. Socket Lokal atau AF_UNIX 2. Socket Networking atau AF_INET Socket Lokal adalah socket yang melakukan komunikasi dengan perantaraansebuah file yang biasanya diletakkan pada direktori /tmp atau /usr/tmp ataupun /var/tmp. Socket semacam ini digunakan umumnya terbatas untuk komunikasi antar aplikasidalam satu mesin. Socket Networking
3

ditujukan untuk komunikasi antar aplikasi antar mesin dalam lingkungan jaringan TCP/IP. Identifikasi socket dilakukan dengan sebuah service identifier yaitu berupa nomor port TCP/IP yang dapat di sambung oleh client. Golongan socket lainnya masih banyak misalnya AF_OSI, AF_NS, namun kitatidak membahasnya kali ini. Socket Networking memiliki beberapa jenis, yang paling umum digunakan yaitu: 1. Socket Stream atau SOCK_STREAM 2. Socket Datagram atau SOCK_DGRAM Socket Stream adalah socket komunikasi full-duplex berbasis aliran (stream) data. Pada model komunikasi Socket Stream, koneksi dua aplikasi harus dalam kondisitersambung dengan benar untuk dapat bertukar data. Ini dapat dianalogikan sepertikomunikasi telepon. Jika sambungan telepon di salah satu titik putus, maka komunikasitidak dapat terjadi. Koneksi model seperti ini akan menjamin data dapat dipertukarkandengan baik, namun memiliki kelemahan dalam hal penggunaan jalur data yang relatif besar dan tidak boleh terputus. Komunikasi stream sering juga disebut dengankomunikasi yang berorientasi koneksi (Connection oriented communication).Socket Datagram

berkomunikasi dengan cara yang berbeda. Socket ini tidak membutuhkan koneksi yang tersambung dengan benar untuk mengirimkan danmenerima data. Model koneksi semacam ini tidak dapat menjamin data dapatdipertukarkan dengan baik, namun memiliki keunggulan dalam hal penggunaan jalur data yang minimal. Socket Datagram dapat dianalogikan dengan komunikasi yangterjadi pada kelas, misalnya pada saat guru melakukan broadcasting materi pelajaranuntuk diterima oleh setiap murid. Tidak ada yang dapat menjamin materi pelajarandapat diterima oleh semua murid dengan baik, kecuali diterapkan metoda rechecking. Rechecking ini dapat dilakukan baik oleh guru maupun murid. Guru bertanya untuk memastikan jawaban dari murid benar, atau murid bertanya untuk memastikankebenaran materi yang diterimanya. Socket Datagram pun menggunakan metoda iniuntuk menjamin pengiriman data dapat dilakukan dengan baik. Komunikasi datagramdisebut juga dengan komunikasi tak berkoneksi (connectionless communication).

Protokol standar untuk komunikasi stream dikenal denga istilah TCP (Transmission Control Protocol), sedangkan standar protokol komunikasi datagramdikenal dengan UDP (User Datagram Protocol). Pada UDP, setiap kali suatu paket datadikirim, informasi soket pengirim dan alamat soket tujuan turut dikirimkan. Haldemikian tidak dibutuhkan oleh TCP, karena TCP akan membuat setup koneksi dengansoket tujuan terlebih dulu. Setelah koneksi terbentuk, tidak dibutuhkan mengirimkaninformasi soket pengirim tiap kali data dikirimkan. Ini karena proses tujuan akanmengidentifikasi setiap data yang tiba pada soket tujuan sebagai data dari proses pengirim. Socket dapat menggunakan : a) Unicast (untuk tujuan IP address tertentu). b) Multicast (untuk banyak tujuan 224.x.x.x). c) Broadcast (langsung dan terbatas). d) Loopback address, misal : 127.x.x.x 2.2.2 Socket Programming URLs dan URLConnections menyediakan mekanisme koneksi pada level tinggisecara relatif untuk mengakses resources dari internet. Namun sebuah program kadang juga membutuhkan komunikasi jaringan pada level rendah, contohnya saat inginmenulis aplikasi untuk Client Server. Komunikasi yang terjadi antara client dan server harus dapat dipercaya(handal), artinya tidak ada data yang bisa dihilangkan dansemuanya harus sampai disisi client dengan urutan yang sama dengan yang dikirimkanoleh server. TCP menyediakan kanal komunikasi point-to-point yang handal yang digunakanoleh aplikasi client-server pada internet untuk berkomunikasi satu sama lainnya. Untuk berkomunikasi diatas TCP, sebuah program client dan sebuah program server harus membangun koneksi satu dengan lainnya. masing-masing program mengikat sebuah socket pada akhir proses

pembangunan koneksinya. Untuk berkomunikasi, masing-masing client dan server membaca dari socket dan juga menulis pada socket untuk koneksinya. Pada umumnya, sebuah server berjalan disebuah komputer khusus danmemiliki soket pada nomor port khusus. Server bersifat pasif hanya menunggu,

mendeteksi socket apakah sebuah client yang meminta koneksi. Pada sisi client, client mengetahui hostnamedari mesin tempat server dijalankan dan nomor port dimana server akan mendeteksi request dari client. Untuk

membuatconnection-request, Client harus berusaha untuk mencari mesin server dan port yang sesuai. Client juga harusmengidentifikasikan dirinya sendiri untuk diketahui oleh server sehingga client dan sever terikat pada nomor port local yang akan digunakan selama koneksi ini. Biasanya hal ini dilakukan oleh system. Jika semuanya berjalan dengan lancar, maka server akan menerima permintaan untuk koneksi. Selama masa penerimaan, server akan memperoleh sebuah socket baru untuk lokal port yang sama dan juga memiliki endpoint pada jarak jauh yang diisi dengan alamat dan port dari client. Hal ini membutuhkan sebuah socket baru agar dapat berlanjut mendeteksi socket sebenarnya untuk connection-request saat menjaga kebutuhan client yang terhubung. Pada sisi client, jika koneksi diterima, berarti sebuah socket berhasil diciptakan dan client dapat menggunakan socket tersebut untuk berkomunikasi dengan server. Sekarang, server dan client sama-sama dapat berkomunikasi dengan cara menulis atau membaca dari socket masing-masing. Sebuah Socket adalah salah satu endpoint atau terminal dari komunikasi dua arah antara dua program yang berjalan pada network. Sebuah socket mencakup nomor port sehingga layer TCP dapat mengidentifikasikan aplikasi yang menjadi tempat tujuan pengiriman data. Untuk tahap implementasi, sebagai contoh pada package java.net yang terdapat pada platform java, disediakan sebuah kelas yang disebut 'Socket', yang mengimplementasikan salah satu sisi dari koneksi dua arah antara program java yang dimiliki , dengan program lainnya pada network. Class Socket digunakan untuk membuat koneksi pada client dengan socket. Socket ini digunakan untuk mengembangkan aplikasi yang memanfaatkan service connection-oriented pada aplikasi yang disediakan oleh server. Pembuatan socket ( create socket ) merupakan hal yang pertama sekali dilakukan dalam membangun koneksi antara client dan Server (sering disebut

juga dengan istilah menciptakan socket). Tujuan penciptaan socket ini adalah untuk mengetahui alamat Inet addres dan port., karena informasi tersebut dibutuhkan dalam membangun koneksi agar bisa saling berkomunikasi. Dalam jaringan, port yang dapat digunakan adalah port dengan nomor 1- 65535. Setelah memperoleh informasi berupa alamat inetaddres dan port, maka dilakukan sebuah koneksi dan socket akan melakukan bind Socket ke alamat lokal (inetaddress) dan port yang diterima. Dalam Socket Programming dikenal adanya stream dan datagram. Peggunaan stream tepat digunakan saat suatu proses yang sudah establish antara satu koneksi dengan koneksi yang lain, dan jika protocol yang digunakan adalah protokol TCP (Transmision Control Protocol). Penggunaan datagram lebih sesuai jika protocol yang digunakan adalah protokol UDP (User Datagram Protocol) dalam melakukan koneksi antara Server dan Client. ( Untuk penjelasan lebih jauh tentang protokol TCP dan UDP akan dijelaskan dalam bab yang selanjutnya). Setelah menciptakan socket , maka yang dilakukan adalah melakukan input berupa stream dan output pada socket. Kemudian terdapat proses pembacaan dan penulisan pada stream, kemudian dilakukakan close connection pada stream. Dan langkah yang terakhir dilakukan penutupan koneksi Socket. Dari penjelasan diatas, dapat diambil kesimpulan bahwa untuk melakukan koneksi antara Client dengan Server menggunakan Socket harus melewati tahap-tahap sebagai berikut : a) Buka sebuah Socket. b) Buka sebuah input stream dan output stream pada Socket. c) Lakukan proses pembacaan dan penulisan pada stream menurut protocol yang dipakai oleh Server misalnya protokol TCP. d) Tutup stream. e) Tutup Socket. Sebagai tambahan, terdapat class dalam socket programming selain Socket yaitu ServerSocket. Server socket merupakan mekanisme dimana server bisa menerima koneksi dari Client pada suatu jaringan. Class ini menyediakan constructor yang menentukan pada port mana dari sebuah Server Socket akan menerima koneksi dari Client. Kemudian terdapat proses menunggu sampai

Server menerima koneksi dari client (method accept), setelah terjadi koneksi dan telah selesai proses yang dijalankan maka koneksi akan ditutup. Pada sisi client, untuk berkomunikasi dengan Server dibentuk ServerSocket yang menerima koneksi Client pada nomor port pada local mesin. Default limit jumlah Client yang bisa diterima oleh Server sebanyak 50 Client atau dengan jumlah Client yang bisa diterima oleh Server sebanyak count. 2.2.3 Socket for Client Socket adalah sebuah penghubung antara dua host, yang dapat dibangun dengan tujuh dasar operasi yaitu: a) Menghubungkan perangkat. b) Mengirim data. c) Menerima data. d) Menutup koneksi. e) Bind (mengikatkan diri) pada port. f) Menyimak data. g) Menerima koneksi Untuk melaksanakan operasi tersebut digunakanlah class socket dan class serversocket. Class Socket pada Java, digunakan oleh client dan server yang mempunyai method yang menangani keempat operasi pertama. Tiga operasi berikutnya hanya dibutuhkan untuk server yang menunggu client untuk koneksi ke server (dengan mengimplementasikan class ServerSocket). Prinsip Socket (client), yaitu : 1. Membuat koneksi dengan server a) the server's IP address (of type InetAddress); b) the appropriate port number for the service. Socket link = new Socket(InetAddress.getLocalHost(),1234); 2. Membuat input and output streams. a) Scanner input = new Scanner(link.getInputStream()); b) PrintWriter output = new PrintWriter(link.getOutputStream(),true); 3. Mengirim dan menerima data a) The Scanner object at the client will receive messages sent by the PrintWriter object at the server,

b) while the PrintWriter object at the client will send messages that are received by the Scanner object at the server (using methods nextLine and println respectively). 4. Menutup koneksi. 2.2.4 Socket for Server Sebuah socket merupakan IP Port pada sebuah host mesin yang spesifik. Socket adalah sebuah konsep yang telah berkembang pada paradigma bahasa pemrograman untuk beberapa waktu. Socket Server digunakan untuk menangani seluruh request dari jaringan yang disebut dengan socket client. Berikut ini adalah cara pendefinisian konstruktor dari class ServerSocket yang akan digunakan untuk menangani koneksi dari Client. Dalam koneksi TCP, socket dan server socket adalah dua class yang biasa digunakan. Server Socket merepresentasikan socket yang berada di server yang menunggu dan mendengarkan request dari client untuk segera dilayani. Socket merepresentasikan end point communication antara client dan server. Ketika server menerima request dari client, server akan membuatkan socket baru yang digunakan sebagai komunikasi antara server dan client sehingga server bisa mendengarkan request dari client yang lain lagi. Client juga membuat socket untuk komunikasi dengan server. Beberapa client dapat terhubung pada port yang sama sekaligus pada server pada waktu yang bersamaan. Data yang masuk dibedakan oleh port yang dituju, client host dan port asal. Server dapat memberitahukan layanan mana (http atau ftp) yang diperuntukkan untuk data dengan memeriksa port. Hal tersebut dapat memberitahukan socket terbuka yang mana pada layanan data tersebut yang dimaksudkan dengan melihat pada alamat client dan port yang simpan dengan data. Tidak lebih dari satu server socket dapat mendengar pada suatu port khusus pada suatu waktu. Sejak suau server menangani banyak koneksi pada suatu waktu, program server cenderung menangani multi-thread. Pada umumnya, ketika server socket medengar request suatu port akan menyetujui koneksi tersebut. Kemudian akan melewati proses koneksi untuk memisahkan

thread. Koneksi yang masuk akan disimpan pada sebuah antrian hingga server dapat menyetujui request tersebut. Prinsip ServerSocket (server), yaitu : 1. Membuat sebuah objek Serversocket. a) ServerSocket servSock = new ServerSocket(1234); 2. Menempatkan server pada kondisi tunggu (waiting state). a) Socket link = servSock.accept(); 3. Membuat input and output streams. a) Scanner input = new Scanner(link.getInputStream()); b) PrintWriter output = new PrintWriter(link.getOutputStream(),true); 4. Mengirim dan menerima data. a) output.println("Awaiting data..."); b) String input = input.nextLine(); 5. Menutup koneksi a) link.close(); 2.3 Java Java adalah bahasa pemrograman berorientasi objek murni yang dibuat berdasarkan kemampuan-kemampuan terbaik bahasa pemrograman objek sebelumnya (C++, Ada, Simula). Java diciptakan oleh James Gosling, developer dari Sun Microsystems pada tahun 1991. Karakteristik Java antara lain : a) Sederhana (Simple). b) Berorientasi Objek (Object Oriented). c) Terdistribusi (Distributed). d) Interpreted. e) Robust. f) Aman (Secure). g) Architecture Neutral. h) Portable. i) Performance. j) Multithreaded. k) Dinamis

10

2.3.1 Kompilasi dan Interpretasi Seperti diketahui, Java adalah bahasa pemrograman yang kode programnya dikompilasi dan diinterpretasi. Meskipun pembuatan aplikasi Java dapat dilakukan melalui IDE (Integrated Development Environment), namun di sini kita memfokuskan pada tool commandline untuk kompilasi dan interpretasi. a) Kompilasi Kompilasi kode program Java dilakukan menggunakan tool commandline yang bernama javac, atau biasa disebut kompiler Java. Tahap kompilasi ini bertujuan untuk mengonversi kode sumber ke program biner yang berisi bytecode, yaitu instruksi-instruksi mesin. Contoh berikut memperlihatkan cara melakukan kompilasi pada file program Coba.java (asumsi sudah berada di command-line atau shell). javac Coba.java Saat mengompilasi kode program, kita juga diperkenankan untuk menspesifikasikan versi rilis tertentu. Aturan dasar dalam spesifikasi versi ini cukup sederhana, di mana versi terbaru dapat mengenali versiversi di bawahnya, namun tidak demikian sebaliknya. Sebagai contoh, untuk mengetahui apakah kode program dapat berjalan di versi 1.4 ataukah tidak, tambahkan opsi-source 1.4. java-source 1.4 Coba.java Jika source digunakan untuk menspesifikasikan rilis asal, opsi target berfungsi untuk menetapkan versi tujuan. Opsi-opsi lain yang sering digunakan diperlihatkan sebagai berikut: // Menetapkan lokasi file-file kelas (classpath) javac -cp D:\java Coba.java javac -classpath D:\java Coba.java // Menetapkan lokasi file .class yang akan dihasilkan javac -d D:\java Coba.java // Hasil: file Coba.class diletakkan di D:\java // Mendapatkan informasi mengenai apa yang dilakukan kompiler javac -verbose Coba.java // Mendapatkan informasi versi (developer)

11

javac -version b) Interpretasi Sebagaimana disinggung, kode program Java tidak dieksekusi di komputer secara langsung, tetapi berjalan di atas komputer hipotesis yang distandardisasikan, yang disebut Java Virtual Machine. Untuk menginterpretasi bytecode, kita menggunakan tool bernama java, atau biasa disebut interpreter Java. Pada saat menginterpretasi, tidak perlu menyertakan ekstensi file (.java atau .class), cukup nama file saja. java Coba Untuk kasus program-program berbasis teks, hasil keluaran akan langsung ditampilkan di command-line. Terkait hal ini, tool java Memungkinkan untuk meng-capture hasil keluaran dan menyimpannya di sebuah file. Contoh perintah berikut akan menangkap hasil keluaran program Coba dan menyimpannya di file coba.txt. java Coba > coba.txt Apabila menggunakan perintah di atas pada aplikasi GUI, maka file keluaran akan tetap diciptakan, namun tidak ada isinya (dengan asumsi bahwa program tidak mencetak teks keluaran). 2.3.2 Elemen Bahasa Java Secara garis besar, elemen-elemen di setiap bahasa pemrograman sebenarnya hampir sama. Meskipun demikian, ada elemen-elemen khusus yang membedakan dan sekaligus mencerminkan identitas suatu bahasa. Adapun mengingat di sini kita bekerja dengan bahasa pemrograman Java, tentunya kita juga perlu memahami elemenelemen dasar bahasa ini. a) Tipe Data Tipe data di Java dikelompokkan menjadi dua jenis, yaitu tipe primitif dan reference (kelas). Tipe primitif/dasar adalah tipe-tipe bawaan, meliputi boolean, char, byte, short, int, long, float, dan double. Sementara itu, tipe reference memiliki semantik seperti pointer. Jenis tipe reference meliputi kelas, interface, dan array.

12

Apabila ingin memperlakukan nilai primitif sebagai suatu objek, Anda bisa memanfaatkan kelas-kelas pembungkus (wrapper).Kelas-kelas tersebut meliputi Boolean, Character, Byte, Short, Integer, Long, Float, dan Double. Perhatikan sintaksnya (penulisan huruf kecil dan besar), agar tidak keliru dengan tipe-tipe primitif. b) Deklarasi dan Inisialisasi Variabel Sebelum digunakan, setiap variabel harus dideklarasikan terlebih dahulu. Langkah ini dilakukan dengan menetapkan tipe data dan nama variabel. Pernyataan deklarasi variabel tunggal juga dapat digunakan untuk mendeklarasikan lebih dari satu variabel, tetapi semuanya harus bertipe sama. int i; int j; // ekuivalen dengan kedua pernyataan di atas int i, j; Deklarasi juga dapat sekaligus melakukan inisialisasi terhadap suatu variabel. int i = 2; int j = 3; int i = 2, j = 3; c) Initial Value Saat mendeklarasikan variabel kelas, kita tidak harus melakukan inisialisasi karena kompiler akan meng-assign initial value (nilai awal atau default). Nilai default untuk semua tipe reference adalah null. Nilai default tipe primitif boolean adalah false, char adalah \u0000, integer (byte, short, int, long) adalah 0, dan floating point (float, double) adalah 0.0. d) Ruang Lingkup Variabel Java mendefinisikan empat jenis variabel, meliputi variabel instance (field non-statis), variabel kelas (field statis), variabel lokal, dan

13

parameter. Istilah field mengacu pada variabel instance dan variabel kelas (terkadang disebut member variable). Sementara itu, istilah variabel mengacu pada semua jenis variabel. Lokasi di mana suatu variabel dideklarasikan secara eksplisit juga menetapkan ruang lingkupnya. Ruang lingkup variabel adalah wilayah di mana suatu variabel dapat diacu melalui namanya. Ruang lingkup juga menyatakan kapan variabel akan diciptakan dan dihapus dari memori. e) Blok Blok adalah kelompok pernyataan (nol atau lebih) di dalam tanda kurung kurawal. Penggunaan blok dengan pernyataan alir kontrol sangat direkomendasikan, meskipun hanya melibatkan sebuah

pernyataan. if (kondisi) { // awal blok // pernyataan } // akhir blok f) Komentar Penulisan komentar dapat mengadopsi blok komentar gaya C ataupun C++. Komentar gaya bahasa C lazimnya digunakan untuk komentar yang terdiri atas beberapa baris. Sementara itu, komentar gaya C++, yang dinyatakan melalui karakter //, umumnya digunakan untuk komentar satu baris. Untuk komentar-komentar yang akan dimasukkan ke dokumentasi dan dihasilkan melalui tool javadoc, disarankan menggunakan /** dan diakhiri dengan karakter */. 2.3.3 Aturan Penamaan Di dalam pemrograman, suatu nama digunakan untuk mengacu ke entitas yang dideklarasikan. Terkait hal ini, ada beberapa aturan dasar penamaan yang perlu sekali diperhatikan dalam upaya menghasilkan kode program yang readable. a) Penamaan Paket

14

Nama awal paket sebaiknya terdiri atas dua atau tiga huruf kecil, dan biasanya menggunakan nama domain Internet, seperti com, org, net, dan edu. Selain itu, Anda juga diperkenankan memberi nama paket dengan kode-kode negara, seperti id, uk, atau au. Penggunaan nama domain ini bertujuan untuk mencegah terjadinya konflik paket, dengan asumsi bahwa Anda tidak menggunakan nama domain orang lain. Sebagai contoh, nama paket berbasis domain

http://didik.indodesain.com adalah com.indodesain.didik. b) Penamaan Kelas dan Interface Nama kelas dan interface sebaiknya berupa kata benda atau ungkapan kata benda yang deskriptif dan tidak terlalu panjang. Penulisan nama mengacu pada sintaks Pascal, di mana huruf pertama untuk setiap kata adalah huruf besar dan tidak ada spasi, misalnya Bangun, SegiTiga, atau KoneksiData. c) Penamaan Method Nama method seharusnya berupa kata kerja atau ungkapan kata kerja. Penulisan method mengacu pada sintaks Camel, di mana huruf pertama untuk setiap kata pertama adalah huruf kecil dan huruf pertama kata selanjutnya adalah huruf besar. Nama method umumnya juga mencerminkan operasi yang dilakukannya, contohnya seperti setData, getData, isValidData, atau toString. d) Penamaan Variabel Penamaan variabel-variabel kelas (fields) mirip dengan penamaan method. Untuk penamaan variabel lokal dan parameter, seringkali menggunakan suatu akronim, singkatan, atau istilah-istilah yang mudah diingat, contohnya seperti sr (StreamReader), buf (buffer), d (double), dan s (String). e) Penamaan Konstanta Seperti umumnya bahasa pemrograman, nama konstanta di Java harus berupa huruf besar semua. Apabila nama konstanta terdiri atas beberapa kata, sebaiknya pisahkan dengan tanda garis bawah _. Contoh

15

penamaan

konstanta

misalnya

MAX,

MAX_DATA,

atau

MAX_LEN_DATA. 2.3.4 Kelas Kelas merupakan salah satu konsep fundamental pemrograman berorientasi objek. Kelas dapat diilustrasikan sebagai suatu cetak biru (blueprint) atau prototipe yang digunakan untuk menciptakan objek. Terkait dengan konsep penting ini, ada beberapa subbahasan yang akan kita ulas di sini. a) Definisi Kelas Definisi kelas terdiri atas dua komponen, yaitu deklarasi kelas dan body kelas. Deklarasi kelas adalah baris pertama di suatu kelas, dan minimal mendeklarasikan nama kelas. Sementara itu, body dideklarasikan setelah nama kelas dan berada di antara kurung kurawal. // deklarasi kelas public class ContohKelas { // body kelas } Di Java, nama kelas sekaligus merepresentasikan nama file kode program, dan sifatnya adalah case-sensitive. b) Konstruktor Kegunaan utama konstruktor adalah untuk menetapkan status awal manakala objek diciptakan. Ada beberapa catatan penting yang harus kita perhatikan dalam pendeklarasian konstruktor. Pertama, nama konstruktor harus sama dengan nama kelas. Kedua, konstruktor boleh memiliki argumen lebih dari satu atau tidak sama sekali. Ketiga, konstruktor tidak boleh mengembalikan suatu nilai. public class ContohKelas { // Konstruktor public ContohKelas() { } }

16

Konstruktor yang tidak memiliki argumen dinamakan sebagai konstruktor default. Apabila suatu kelas dideklarasikan tanpa adanya sebuah konstruktor, maka secara implisit Java akan menambahkan konstruktor default. 2.3.5 Method Seperti halnya kelas, ada dua bagian utama dalam definisi method, yaitu deklarasi dan body method. Deklarasi method mendefinisikan semua atribut method, seperti level akses, tipe kembalian (jika ada), dan argumen-argumen (jika ada). a) Method main Method main merupakan method khusus yang berperan sebagai entry point pada aplikasi. Setiap kelas di suatu aplikasi boleh memiliki method main, namun hanya satu yang ditetapkan untuk dieksekusi saat aplikasi dijalankan. public static void main(String[] args) { // isi method main } 2.3.6 Object Di pemrograman berorientasi objek, objek adalah entitas dasar saat runtime. Pada saat kode program dieksekusi, objek berinteraksi satu sama lain tanpa harus mengetahui detil data atau kodenya. Interaksi antara objek ini dilakukan menggunakan suatu message. Objek memiliki suatu siklus hidup, yaitu diciptakan, dimanipulasi, dan dihancurkan. a) Menciptakan Objek Objek diciptakan menggunakan operator new. Dari sisi kelas, langkah ini merupakan instantiasi kelas. Selanjutnya objek yang berhasil diciptakan tersebut akan diletakkan di memori heap. Contoh Kelas ck = new ContohKelas(); Dalam kasus-kasus tertentu, terkadang kita juga dapat menciptakan objek tanpa harus meng-assign ke variabel. Langkah ini umumnya dilakukan apabila kita tidak memerlukan referensi ke objek tersebut.

17

Sebagai contoh, jika kita memiliki method yang menerima argumen berupa objek ContohKelas, maka dapat kita tuliskan seperti berikut: getData(new ContohKelas()); b) Memeriksa Tipe Objek Kita memanfaatkan fungsionalitas operator instanceof untuk

mengetahui tipe suatu objek pada saat runtime. Operator ini akan mengembalikan nilai true apabila tipe objek sesuai, sebaliknya mengembalikan nilai false. Contoh Kelas ck = new ContohKelas(); System.out.println(ck instanceof ContohKelas); // Output: true Perlu diperhatikan, instanceof akan selalu mengembalikan nilai false jika variabel objek diinisialisasi dengan nilai null. Ini karena nilai null tidak mencerminkan objek apa pun. ContohKelas ck2 = null; System.out.println(ck2 instanceof ContohKelas); // Output: false Operator instanceof hanya dapat digunakan pada tipe reference dan objek. Penggunaan operator ini pada tipe primitif akan mengakibatkan kesalahan saat kompilasi. c) Menghapus Objek Java menggunakan teknik yang dikenal sebagai garbage collection untuk menghapus objek-objek yang sudah tidak diperlukan. Dengan demikian, kita tidak perlu khawatir akan terjadinya kebocoran memori. Dalam praktiknya, garbage collector mampu mengidentifikasi kapan suatu objek dialokasikan dan kapan ia tidak digunakan lagi.

18

BAB III PEMBAHASAN

3.1 Skenario Program Dalam pembuatan program ini, program chatting dibuat dengan menggunakan bahasa pemrograman java. Diamna program ini, konsepnya kita memerlukan database terkoneksi agar dapat berjalan. Untuk menjalankan chat, kita harus melakukan login terlebih dahulu, agar program chat dapat menggunakan username yang dipakai login, untuk melakukan chat. Untuk chatnya sendiri, dalam program ini, tidak memerlukan server, jadi hanya bersifat peer-to-peer. Disini untuk memulai chat, user harus memasukkan nomor port yang dibuka. Untuk memulai percakapan, kita harus menambahkan teman terlebih dahulu, dengan memasukkan IP teman, serta nomor port yang dibuka teman kita, selanjutnya nama teman yang sudah ditambahkan akan masuk ke combo-box list teman. Selanjutnya, chatting sudah dapat dilakukan dengan memilih salah satu teman yang ada di list. 3.1.1 Struktur Program Dalam pembatannya, program ini menggunakan 4 class yaitu: a) Main : merupakan class utama yang digunakan untuk memanggil interface login, dan juga sebagai class utama, agar jika sudah dijadikan file executable, dapat dijalankan langsung b) Login : merupakan class yang digunakan untuk melakukan login dan signup, dimana class ini berhubungan dengan class database. Untuk masuk ke program utama, kita memerlukan login terlebih dahulu c) Db : merupakan class yang dikhususkan untuk koneksi ke database, dan berisi semua query yang digunakan untuk mengakses database. d) Chat01 : merupakan class utama yang digunakan untuk melakukan chatting, dimana bisa diakses setelah melakukan login, username dan nama user yang akan digunakan chat berasal dari database.

19

3.1.2 Antarmuka Program Untuk antar muka (interface) program ini memiliki 2 interface utama, yaitu interface Login dan Chatting, dimana interface tersebut memiliki kegunaan masing masing, untuk fungsi dan kegunaannya akan dijelaskan sbb: Login Dibawah ini merupakan interface Login yang merupakan interface dari class login.

Gambar 3. 1 Interface Login

Pada interface ini, terdapat fitur signup dan login, di sebelah kiri merupakan tempat untuk melakukan login, dan sebelah kanan merupakan untuk signup, diman untuk melakukan login, kita harus terdaftar terlebih dahulu.

20

Chatting Interface ini merupakan interface utama untuk melakukan chatting, dimana interface ini kita melakukan segala aktifitas chatting. Berikut merupakan tampilan interface chat tersebut.

Gambar 3. 2 Interface Chat

Pada tampilan diatas, terdapat textfield open port, dimana mendefinisikan port yang akan kita buka untuk memulai koneksi, start untuk memulai koneksi, textfield pesan untuk memasukkan pesan, add friend untuk menambahkan teman ke dalam list, dan combo-box friend untuk memilih teman yang akan diajak chatting.

21

3.1.3 Kebutuhan Sistem Untuk menjalankan program ini, dibutuhkan 2 komponen utama agar utama agar program ini dapat berjalan sempurna. Program ini menggunakan database, dan bahasa pemrogram java, jadi hal yang diperlukan untuk menjalankan program ini dengan maksimal adalah 1. Java Runtime Environtment JRE inilah yang memungkinkan sebuah program Java dapat berjalan di system. JRE ini mengeksekusi binary-binary dari class-class dan mengirimnya ke JVM untuk diproses lagi ke prosesor. Setiap JRE pasti memiliki sebuah JVM di dalamnya untuk melakukan pemrosesan selanjutnya 2. MySQL MySQL merupakan program pengakses database yang bersifat network sehingga dapat digunakan untuk aplikasi Multi User (Pengguna Banyak). Jadi untuk dapat menjalankan program ini, dalam sistem harus terinstall mySQL terlebih dahulu.

22

3.2 Demo Program Kali ini akan dijelaskan bagaimana cara program dijalankan, instalasi database, serta cara memulai dan menggunakan program. Untuk menjalankan program, komputer yang akan melakukan chatting, harus berada pada satu jaringan yang sama, dan dapat terhubung satu sama lain

3.2.1 Persiapan Memulai Program Untuk memulai program ini, pertama-tama kita harus mengaktifkan mySQL terlebih dahulu. Sebagai contoh disini kita menggunakan XAMMP untuk mengaktifkan mysql

Gambar 3. 3 Mengaktifkan MySQL

Untuk menjalankan program untuk pertama kalinya, kita harus membuat database terlebih dahulu dengan nama login dimana database tersebut merupakan database yang diperlukan dalam menjalankan program ini. Setelah itu, kita menambahkan tabel bernama username, dan menambahkan field sbb

23

Gambar 3. 4 Penambahan tabel pada database

Pada pengelolaan database ini bisa menggunakan pengolah database apa saja. Diatas adalah contoh pembuatan field yang diperlukan dalam program, beserta data dummy yang telah dimasukkan secara opsional. Jika sudah dibuat, maka program sudah dapat dijalankan sebagaimana mestinya. 3.2.2 Menjalankan Program Untuk menjalankan program, bisa dengan menjalankan langsung dari class main, atau menjalankan langsung file executable *.jar yang terlampir.

Gambar 3. 5 Menjalankan class main pada java

Jika setelah dijalankan, maka akan tampil tampilan login sebagai berikut.

24

Gambar 3. 6 Tampilan login dan register

Pastikan untuk mulai login maupun signup, mysql telah diaktikan, sehingga bisa melakukan pendaftaran, maupun login. Untuk dapat melakukan login, sebelumnya kita harus terdaftar terlebih dahulu, agar data masuk ke database. Jika sudah terdaftar, masukkan username dan password ke dalam field username dan password, lalu klik pada tombol login. Jika sukses, maka akan masuk ke tampilan utama chatting seperti gamabar dibawah ini.

25

Gambar 3. 7 Tampilan chating

Untuk memulai, kita masukkan nomor port yang akan dibuka. Dalam hal ini, nomor port kita harus berbeda dengan nomor port teman yang akan ditambahkan. Misal kita akan membuka port 12, lalu klik start, maka akan terlihat seperti ini.

Gambar 3. 8 Membuka koneksi untuk teman

Di sisi lain, kita juga akan membuka koneksi oleh user lain, dalam hal ini, kedua user harus berada dalam satu jaringan dalam komputer yang berbeda. Misalkan kita akan login sebagai user bernama admin, lalu membuka port yang berbeda dengan user pertama, misalkan 56

26

Gambar 3. 9 Admin membuka port berbeda

Menambahkan teman Untuk memulai chat, kita harus menambahkan teman terlebih dahulu dengan klik add friend, misalkan kita akan memakai user pertama untuk menambahkan user kedua sebagai teman, maka akan muncul dialog box untuk memasukkan IP dan port yang dibuka oleh teman (user 2).

Gambar 3. 10 Dialog box untuk memasukkan IP dan port

Pada dialog diatas, masukkan IP teman, dalam hal ini IP user2.

Gambar 3. 11 Memasukkan nomor port

Selanjutnya masukkan nomor port teman, maka teman sudah ditambahkan, dan akan otomatis masuk ke list teman yang ada di combo-box.

27

Gambar 3. 12 Memilih penerima pesan

Diatas, terlihat bahwa pada combo-box sudah terlihat nama teman yang ditambahkan, selain itu juga berfungsi untuk memilih ke siapa pesan akan dikirimkan. Memulai Chat Untuk memulai chat, pastikan kita sudah memilih teman yang akan diajak chat, pada kedua sisi user harus sudah dipilih untuk pasangannya masing-masing. Steleah semua siap, kedua sisi user sudah dapat melakukan chatting. Berikut contoh percakapan kedua sisi user

Gambar 3. 13 Aktivitas Chating

Program chatting ini hanya bisa untuk 1 user saja untuk dikirimkan pesan, jadi tidak support untuk group chat.

28

BAB IV PENUTUP

4.1 Kesimpulan Jadi dari pembuatan program chatting ini, bisa disimpulkan bahwa socket merupakan komponen utama dan paling dibutuhkan untuk melakukan komunikasi dalam suatu jaringan, yang dalam hal ini mengimplimentasikan chatting. Dengan adanya socket, aplikasi dapat membuka koneksi dengan jaringan, dengan menggunakan parameter alamat IP dan nomor port yang dibuka oleh program, jadi dengan bahasa pemrograman apapun, untuk melakukan komunikasi baik itu dalam bentuk teks, maupun file, socket mutlak dibutukan agar proses pada setiap aplikasi dapat berkomunikasi satu sama lain. Begitu pula dengan program chatting ini, pada intinya adalah dengan dibukanya koneksi socket di kedua pihak, maka teks dapat dikirimkan dan diterima satu sama lain.

4.2 Saran Dari pembuatan laporan ini disarankan agar pembaca dapat memahami apa itu socket, dan bagaimana mekanisme pengiriman dan penerimaan pesan dari aplikasi satu ke aplikasi lainnya yang terhubung di jaringan

29

DAFTAR PUSTAKA
Anonymous. http://www.scribd.com/doc/55528125/SOCKET-RPC-JRMI .Diakses Selasa, 11 Desember 2012 pada pukul 09.23 Pengenalan Java. http://lepsab.gunadarma.ac.id/show/archive/1_Pengenalan Java.pdf . Diakses Selasa, 11 Desember 2012 pada pukul 09.25 Pengenalan Bahasa JAVA. http://wdwisuryanto.staff.ipb.ac.id/files/2011/04/JENIIntro1-Bab02-Pengenalan-Bahasa-JAVA.pdf. Diakses Selasa, 11 Desember 2012 pada pukul 09.33

30

LAMPIRAN Source code Class Main


package aplicationchat; /** * * @author ultimaxx */ public class Main { public static void main(String[] args) { System.out.println("Selamat datang di program chat"); new Login().setVisible(true); // TODO code application logic here } }

Source code Class db


package aplicationchat; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java.util.Vector; import javax.management.Query; /** * Class Semua tentang database dan query * @author Kelompok 10 */ public class db { String drv = "com.mysql.jdbc.Driver"; String url = "jdbc:mysql://localhost:3306/login"; String usr = "root"; String pas = ""; Connection con = null; Statement st; public db(){ try{

31

Class.forName(drv); con = DriverManager.getConnection(url, usr, pas); System.out.println("Koneksi berhasil"); } catch (Exception e){ System.out.println("Gagal : "+e.getMessage()); } } public boolean login(String user, String pass){ String query = "select count(*) from username where user = '"+ user +"' and pass = '"+pass+"'"; System.out.println(query); boolean ada = false; try{ st = con.createStatement(); ResultSet rs = st.executeQuery(query); rs.next(); int n = Integer.parseInt(rs.getString(1)); if (n > 0) ada = true; st.close(); } catch (Exception e){ System.out.println("gagal : "+e.getMessage()); } return ada; } public boolean signup(String usernm, String nama, String passwd, String jk) { String query = "INSERT INTO username VALUES('"+ usernm + "', '"+ passwd +"', '"+ nama +"', '"+ jk +"')"; System.out.println(query); boolean bisa = false; try { st = con.createStatement(); int hasil = st.executeUpdate(query); if(hasil > 0) System.out.println("Insert data sukses"); bisa=true; st.close(); } catch (Exception e){ bisa=false;

32

System.out.println("error.." + e.getMessage()); } return bisa; } String namadb; public String getNama(String usernm) { String query = "select nama from username where user = '"+usernm+"'"; System.out.println(query); try{ st = con.createStatement(); ResultSet rs = st.executeQuery(query); rs.next(); namadb = rs.getString(1);

st.close(); } catch (Exception e) { System.out.println("gagal : "+e.getMessage()); } return namadb; } }

Source code Class login


package aplicationchat; import javax.swing.JOptionPane; /** * * @author Kelompok 10 */ public class Login extends javax.swing.JFrame { db DB = new db(); Chat01 chatFrame;

33

String namadb; /** Creates new form Login */ public Login() { initComponents(); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") { String usrnm = jTextField1.getText(); return usrnm; }*/ private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: String user = jTextField1.getText(); String pass = new String(String.valueOf(jPasswordField1.getPassword())); namadb = DB.getNama(user).toString(); if(DB.login(user, pass)){ setVisible(false); //new Chat01(user).setVisible(true); user = jTextField1.getText().toString(); chatFrame = new Chat01(user, namadb); chatFrame.show(); } else { int pil = 0; pil = JOptionPane.showConfirmDialog(this, "Incorect"); if(pil == JOptionPane.NO_OPTION){ dispose(); } return; } }

34

private void jTextField2ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: String nama = jTextField2.getText(); String usernm = jTextField3.getText(); String passwd = new String(String.valueOf(jPasswordField2.getPassword())); String jk = jComboBox1.getSelectedItem().toString(); if(DB.signup(usernm, nama, passwd, jk)){ { jLabel9.setText("Pendaftaran Sukses!!!"); jTextField2.setText(""); jTextField3.setText(""); jPasswordField2.setText(""); } } else{ int pil = 0; pil = JOptionPane.showConfirmDialog(this, "Pendaftaran gagal, silahkan cek username"); if(pil == JOptionPane.NO_OPTION) { dispose(); } } } /** * @param args the command line arguments * */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new Login().setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JButton jButton1; private javax.swing.JButton jButton2;

35

private javax.swing.JComboBox jComboBox1; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel7; private javax.swing.JLabel jLabel8; private javax.swing.JLabel jLabel9; private javax.swing.JPasswordField jPasswordField1; private javax.swing.JPasswordField jPasswordField2; private javax.swing.JSeparator jSeparator1; private javax.swing.JTextField jTextField1; private javax.swing.JTextField jTextField2; private javax.swing.JTextField jTextField3; // End of variables declaration }

Source code Class Chat01


package aplicationchat; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintStream; import java.net.InetAddress; import java.net.Inet4Address; import java.net.ServerSocket; import java.net.Socket; import java.util.Vector; import javax.swing.DefaultComboBoxModel; import javax.swing.JOptionPane; /** * * @author Kelompok 10 */ public class Chat01 extends javax.swing.JFrame implements Runnable { Vector NameList = new Vector(), IPList = new Vector(), PortList = new Vector();

36

String ipKu = "192.168.1.107", namaKu, namaorg, namalkp; Thread t = new Thread(this); //modifikasi //Login usr = new Login();

/** Creates new form Main */ public Chat01(String namaorg, String namalkp) { this.namaorg = namaorg; this.namalkp = namalkp; ipKu = getIPAddrs(); initComponents(); System.out.println("nama:"+ namaorg +",lengkapnya:"+namalkp); jLabel5.setText(namaorg); jLabel7.setText(namalkp); //java.awt.Dimension dim = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); //setSize(dim); } private String getIPAddrs(){ String ip = ""; try{ InetAddress ia = Inet4Address.getLocalHost(); ip = ia.getHostAddress(); } catch (Exception e){} return ip; } private int getPort(){ int x = 1234; try{ x = Integer.parseInt(tfport.getText()); } catch (Exception e) {} return x; } //ngirim pesan ke org private void kirimkeTeman(String ipadr, String port, String pesan){ Socket sock; InetAddress ip; PrintStream ps = null; boolean sts = false; try{ ip = InetAddress.getByName(ipadr); sock = new Socket(ip, Integer.parseInt(port));

37

// Mengirim pesan ke server ps = new PrintStream(sock.getOutputStream()); ps.println(pesan); taMonitor.setText(namaKu + " : " + pesan + "\n" + taMonitor.getText()); } catch (Exception e) {} } private String addNewFriend(){ String namaTeman, ipTeman, portTeman, hasil; ipTeman = JOptionPane.showInputDialog("Masukkan IP Address Teman Anda : "); portTeman = JOptionPane.showInputDialog("Masukkan port yang dibuka teman anda : "); Socket sock; InetAddress ip; PrintStream ps = null; boolean sts = false; int port = getPort(); try{ ip = InetAddress.getByName(ipTeman); sock = new Socket(ip, Integer.parseInt(portTeman)); //mengirim peasn ke server ps = new PrintStream(sock.getOutputStream()); ps.println("D#" + namaKu + "#" + ipKu + "#" + tfport.getText().trim()); //menerima dan menampilkan pesan dari client BufferedReader br = new BufferedReader(new InputStreamReader(sock.getInputStream())); namaTeman = br.readLine(); hasil = namaTeman + "#" + ipTeman + "#" + portTeman; } catch (Exception e) { hasil = ""; } return hasil; } //nie fungsi utamanya public void run(){ System.out.println("halo"); namaKu = jLabel7.getText().toString(); //namaKu = tfnama.getText().trim(); System.out.println(namaKu); NameList.addElement(namaKu); IPList.addElement(ipKu); PortList.add(String.valueOf(getPort())); String pesan, ipc, nama;

38

ServerSocket ss = null; PrintStream ps; try{ ss = new ServerSocket(getPort()); taMonitor.append("Koneksi dibukan untuk umum.. dengan IP : " + ipKu + ";Port : " + getPort()); while(true){ try{ //menerima koneksi dari client Socket sock = ss.accept(); //mengambil dan menampilkan pesan dari client BufferedReader br = new BufferedReader(new InputStreamReader(sock.getInputStream())); pesan = br.readLine(); System.out.println(pesan); ipc = sock.getInetAddress().getHostAddress(); int cek = IPList.indexOf(ipc); System.out.println(cek); if(cek < 0){ if(pesan.substring(0,2).equals("D#")){ String[] acc = pesan.split("#"); NameList.addElement(acc[1]); IPList.addElement(acc[2]); PortList.addElement(acc[3]); DefaultComboBoxModel dcbm = new DefaultComboBoxModel(NameList); cmbfriend.setModel(dcbm); pesan = acc[1] + "Telah masuk..\n"; ps = new PrintStream(sock.getOutputStream()); ps.println(namaKu); } else pesan = ""; } else { if(pesan.equalsIgnoreCase("0#OFF")){ nama = NameList.elementAt(cek).toString(); IPList.remove(cek); NameList.remove(cek); PortList.remove(cek); DefaultComboBoxModel dcbm = new DefaultComboBoxModel(NameList); cmbfriend.setModel(dcbm); pesan = nama + "Telah Logout...\n"; }else { ipc = NameList.elementAt(cek).toString(); ipc = ipc + ":"; pesan = ipc + pesan + "\n";

39

} } taMonitor.setText(pesan + taMonitor.getText()); taMonitor.append(pesan); //menutup konkesi br.close(); sock.close(); } catch (Exception e){ System.out.println("Terjadi gangguan.."); } } } catch (Exception e){ System.out.println("Server gagal dijalankan"); } } private void btnstartActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: if(btnstart.getText().equals("START")){ btnstart.setText("STOP"); //tfnama.setEditable(false); tfport.setEditable(false); t = new Thread(this); t.start(); } else { btnstart.setText("START"); t.stop(); for(int i = 1; i < IPList.size(); i++){ kirimkeTeman(IPList.elementAt(i).toString(), PortList.elementAt(i).toString(), "0#OFF"); } NameList = new Vector(); IPList = new Vector(); PortList = new Vector(); DefaultComboBoxModel dcbm = new DefaultComboBoxModel(NameList); cmbfriend.setModel(dcbm); } } private void tfpesanKeyReleased(java.awt.event.KeyEvent evt) { // TODO add your handling code here: if(btnstart.getText().equals("STOP") && evt.getKeyCode() == java.awt.event.KeyEvent.VK_ENTER){ int f = cmbfriend.getSelectedIndex(); String ipt = IPList.elementAt(f).toString(); String port = PortList.elementAt(f).toString();

40

String pesan = tfpesan.getText().trim(); kirimkeTeman(ipt, port, pesan); tfpesan.setText(""); } } private void btnbaruActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: if(btnstart.getText().equals("START")) return; String hasil = addNewFriend(); if(!hasil.equals("")){ String[] sp = hasil.split("#"); NameList.addElement(sp[0]); IPList.addElement(sp[1]); PortList.addElement(sp[2]); DefaultComboBoxModel dcbm = new DefaultComboBoxModel(NameList); cmbfriend.setModel(dcbm); } } private void cmbfriendActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } private void tfpesanActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } private void tfportActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: } private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: int f = cmbfriend.getSelectedIndex(); String ipt = IPList.elementAt(f).toString(); String port = PortList.elementAt(f).toString(); String pesan = tfpesan.getText().trim(); kirimkeTeman(ipt, port, pesan); tfpesan.setText(""); }

41

private void formWindowClosing(java.awt.event.WindowEvent evt){ for(int i = 1; i < IPList.size(); i++){ kirimkeTeman(IPList.elementAt(i).toString(), PortList.elementAt(i).toString(), "0#OFF"); } } /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { //new Chat01(String namaorg).setVisible(true); } }); } // Variables declaration - do not modify private javax.swing.JButton btnbaru; private javax.swing.JButton btnstart; private javax.swing.JComboBox cmbfriend; private javax.swing.JButton jButton1; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel7; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JPanel jPanel4; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JTextArea jTextArea1; private javax.swing.JTextArea taMonitor; private javax.swing.JTextField tfpesan; private javax.swing.JTextField tfport; // End of variables declaration

42

You might also like