Jaringan (network)
Dalam pemrograman, jaringan (network) hanyalah salah satu jenis dari input di mana data bisa diambil, dan output di mana data bisa dikirim. Konsep ini mempermudah pemahaman kita tentang pemrograman dalam jaringan, akan tetapi ada beberapa hal lain yang harus diperhatikan sehingga pemrograman pada jaringan dapat berhasil dengan baik.
Pada Java, kita bisa menggunakan aliran input dan output untuk melakukan komunikasi pada network, seperti halnya pada file. Akan tetapi membuat koneksi jaringan antara dua komputer sedikit lebih rumit, karena ada dua komputer yang berbeda, yang keduanya harus setuju membuka koneksi. Dan ketika data dikirimkan dari satu komputer ke komputer lain, komunikasi harus dilakukan seirama sehingga data yang dikirimkan akan sampai ke komputer yang lain.
Salah satu paket Java standar adalah
java.net
. Paket ini memiliki beberapa kelas yang bisa digunakan untuk berkomunikasi melalui jaringan. Dua jenis I/O network disediakan dalam paket ini. Yang pertama, yang lebih tinggi tingkatannya, berdasarkan pada Web dan memberikan fasilitas komunikasi seperti halnya web browser ketika mendownload suatu halaman web untuk kemudian ditampilkan. Kelas utama dalam jenis network seperti ini adalah java.net.URL
dan java.net.URLConnection
. Suatu objek bertipe URL
adalah lambang abstrak dari sebuah URL (Universal Resource Locator), yaitu alamat web di mana dokumen HTML atau lainnya bisa ditemukan pada web. Sedangkan URLConnection
adalah koneksi network ke dokumen tadi.Jenis I/O kedua adalah melihat jaringan pada tingkatan yang lebih rendah, yaitu berdasarkan ide suatu soket (socket). Soket digunakan oleh program untuk melakukan koneksi dengan program lain pada suatu jaringan. Komunikasi melalui network melibatkan dua soket, yaitu masing-masing pada setiap komputer. Java memiliki kelas
java.net.Socket
untuk merepresentasikan suatu soket yang digunakan dalam komunikasi network.Istilah "soket" mungkin mirip dengan colokan kabel data (misalnya) modem, akan tetapi penting untuk diingat bahwa soket adalah objek bertipe
Socket
. Artinya program bisa memiliki beberapa soket dalam waktu yang sama, yang masing-masing terhubung ke program yang dijalankan pada komputer lain. Semuanya menggunakan koneksi network yang sama dari satu kabel.Bagian ini akan memberikan pengenalan tentang kelas-kelas dasar jaringan, dan bagaimana hubungannya dengan aliran input dan ouput serta pengecualian.
URL dan URLConnection
KelasURL
digunakan untuk merepresentasikan suatu sumber pada Web. Setiap sumber memiliki alamat, yang unik (tidak bisa sama), dan memiliki informasi yang cukup sehingga web browser bisa mencari sumber tersebut dan mengambilnya. Alamat ini disebut "url" atau "universal resource locator".Suatu objek beritpe kelas
URL
melambangkan alamat tersebut. Jika kita sudah memiliki objek bertipe URL
, maka kita bisa membuka URLConnection
ke alamat tersebut. Suatu url biasanya berupa string, misalnya "http://java.lyracc.com/belajar/java-untuk-pemula/bab-i-pendahuluan
". Ada juga yang disebut url relatif. URL relatif adalah lokasi suatu sumber relatif terhadap url lain, yang biasanya disebut landasan (base) atau konteks (context) dari url relatif tersebut. Misalnya jika konteksnya adalah http://java.lyracc.com/belajar/java-untuk-pemula/
maka url relatif dari "bab-i-pendahuluan
" akan menunjuk pada http://java.lyracc.com/belajar/java-untuk-pemula/bab-i-pendahuluan
.Suatu objek bertipe
URL
bukan string sederhana, akan tetapi dibangun dari kumpulan string yang membentuk suatu url. Objek URL
juga bisa dibuat dari objek URL
lain, yang merupakan konteksnya, dan string lain yang berisi relatif urlnya. Konstruktornya memiliki bentuk seperti :public URL(String alamatURL) throws MalformedURLException
public URL(URL konteks, String alamatRelatif) throws MalformedURLException
MalformedURLException
jika string yang diberikan bukan nama url legal. Kelas MalformedURLException
merupakan kelas turunan dari IOException
yang wajib ditangani, sehingga konstruktor di atas harus dipanggil dalam pernyataan try ... catch
atau ditulis di dalam subrutin yang melempar pengecualian ini.Konstruktur jenis kedua akan lebih nyaman digunakan untuk applet. Dalam applet, tersedia dua metode yang bisa digunakan untuk mengambil konteks URL. Metode
getDocumentBase()
pada kelas Applet
mengembalikan objek bertipe URL
. Objek URL
ini adalah lokasi tempat halaman HTML yang berisi applet tersebut berada. Dengan ini, kita bisa memerintahkan applet untuk kembali dan mengambil file lain yang disimpan di tempat yang sama. Misalnya,URL url = new URL(getDocumentBase(), "data.txt");
URL
baru yang merujuk pada file bernama data.txt
pada komputer yang sama dan pada direktori yang sama pada halaman web di mana applet tersebut sedang berjalan.Metode lainnya, yaitu
getCodeBase()
, mengembalikan URL
yang merupakan lokasi di mana applet tersebut berada (belum tentu sama dengan lokasi HTML-nya).Setelah kita memiliki objek
URL
yang benar, kita bisa memanggil openConnection()
untuk membuka koneksi pada URL
tersebut. Metode ini mengembalikan objek bertipe URLConnection
. Objek URLConnection
bisa digunakan untuk membuka InputStream
untuk membaca halaman atau file pada alamat URL tersebut, yaitu dengan menggunakan metode getInputStream()
. Misalnya :URL url = new URL(alamatURL); URLConnection koneksi = url.openConnection(); InputStream dataURL = connection.getInputStream();
openConnection()
dan getInputStream
dapat melempar pengecualian IOException
. Jika InputStream
berhasil dibuka, kita bisa menggunakannya dengan cara biasa, termasuk membungkusnya dalam aliran input jenis lain, misalnya BufferedReader
. Membaca dari aliran ini tentunya juga bisa melemparkan pengecualian.Salah satu metode instansi yang berguna dalam kelas
URLConnection
adalah getContentType()
, yang mengembalikan String
yang menjelaskan jenis informasi pada URL yang ditunjuk. Hasilnya bisa bernilai null
jika jenisnya belum diketahui, atau tidak bisa ditentukan. Jenis dokumen bisa saja belum tersedia hingga aliran input berhasil dibuat, sehingga lebih baik menggunakan getContentType()
setelah getInputStream()
berhasil dilakukan.String yang dikembalikan oleh
getContentType()
ditulis dalam format yang disebut MIME, misalnya "text/plain", "text/html", "image/jpeg", "image/gif", dan banyak lagi lainnya. Semua jenis MIME terdiri dari dua bagian, yaitu bagian umum, seperti "text" atau "image", dan bagian khususnya, misalnya "html" atau "gif". Jika kita hanya tertarik pada data teks misalnya, kita hanya perlu menguji apakah hasil keluaran getContentType()
dimulai dengan "text". (Jenis MIME pertama kali dimaksudkan untuk menjelaskan isi email. Namanya adalah singkatan dari "Multipurpose Internet Mail Extensions". Kini, MIME digunakan secara umum untuk menjelaskan jenis suatu informasi atau file pada suatu sumber).Mari kita lihat contoh singkat bagaimana membaca data dari suatu URL. Subrutin berikut akan membuka koneksi ke URL tertentu, mengecek apakah jenisnya berupa teks, kemudian mengkopi hasilnya ke layar. Beberapa operasi dalam subrutin ini mungkin melempar pengecualian. Kita akan menambahkan "
throws Exception
" di kepala subrutin untuk meneruskan penanganan pengecualian ini kepada program utama yang memanggil subrutin ini.static void bacaTeksDariURL( String alamatURL ) throws Exception { // Subrutin ini mencetak isi dari alamat URL yang // diberikan ke layar. Semua kesalahan akan ditangani // oleh program yang memanggil subrutin ini /* Buka koneksi ke URL, dan ambil aliran input * untuk membaca data dari URL. */ URL url = new URL(alamatURL); URLConnection koneksi = url.openConnection(); InputStream dataURL = koneksi.getInputStream(); /* Cek apakah konten bertipe teks */ String jenisKonten = koneksi.getContentType(); if (jenisKonten == null || jenisKonten.startsWith("text") == false) throw new Exception("URL tidak bertipe teks."); /* Kopi karakter dari aliran input ke layar * hingga akhir file ditemukan (atau kesalahan ditemui) */ while (true) { int data = dataURL.read(); if (data < 0) break; System.out.print((char)data); } } // akhir bacaTeksDariURL()
Soket, Klien, dan Server
Komunikasi melalui internet dilakukan berdasarkan sepasang protokol yang dinamakan Internet Protocol dan Transmission Control Protocol, yang digabungkan menjadi TCP/IP. (Sebenarnya, ada lagi protokol komunikasi yang lebih sederhana yang disebut dengan UDP yang bisa digunakan menggantikan TCP pada beberapa aplikasi. UDP juga didukung Java, akan tetapi kita akan membahas TCP/IP saja yang merupakan komunikasi dua arah yang handal digunakan pada beberapa komputer melalui jaringan).Agar dua program dapat berkomunikasi menggunakan TCP/IP, masing-masing program harus membuat soket, yang kemudian soket-soket tersebut harus terhubung satu sama lain. Setelah terhubung, komunikasi dapat dilakukan dengan menggunakan aliran input dan output seperti biasa. Setiap program harus memiliki aliran input dan outputnya masing-masing. Data yang ditulis oleh suatu program di aliran outputnya akan dikirim ke komputer lain. Di sana, data tersebut akan diisi pada aliran input program tersebut. Ketika program tadi membaca aliran inputnya, maka pada dasarnya program tersebut membaca data yang dikirim oleh program lain.
Bagian tersulitnya adalah bagaimana membuat koneksi antar komputer tersebut. Dalam hal ini, dua soket akan digunakan. Pertama-tama, suatu program harus membuat soket yang menunggu secara pasif hingga koneksi lain dari soket lain di komputer lain datang. Soket yang sedang menunggu ini disebut sedang "mendengar" (listening) suatu koneksi.
Di sisi lain di komputer lain, program lain membuat soket yang mengirim permintaan sambungan ke soket pendengar tadi. Ketika soket pendengar menerima permintaan sambungan dari soket lain, soket ini akan merespon, sehingga komunikasi akan terjadi. Begitu komunikasi terjadi, maka masing-masing program akan bisa membuat aliran input dan aliran output untuk koneksi ini. Komunikasi akan terus terjadi hingga salah satu program menutup (close) koneksi.
Program yang membuat soket pendengar, juga sering disebut server, dan soketnya disebut soket server. Program yang menghubungi server disebut klien (client), dan soket yang digunakan disebut soket klien.
Idenya adalah suatu server di suatu tempat pada network sedang menunggu permintaan sambungan dari suatu klien. Server dianggap sebagai sesuatu yang memberikan layanan, dan klien mendapatkan layanan dengan cara menyambungkannya pada server. Pada komunikasi jaringan, ini disebut model klien/server.
Dalam aplikasi dunia nyata, program server dapat memberikan koneksi kepada beberapa klien pada waktu yang sama. Ketika suatu klien terhubung pada soket pendengar, maka soket tersebut tidak berhenti mendengar. Akan tetapi, soket tersebut akan terus mendengar jika ada koneksi klien lain pada saat yang sama.
Kelas
URL
yang telah didiskusikan sebelumnya menggunakan soket klien di belakang layar untuk melakukan komunikasi jaringan yang dibutuhkan. Di sisi lainnya adalah program server yang menerima permintaan sambungan dari objek URL
, membaca permintaan objek tersebut, misalnya permintaan file di alamat tertentu, dan meresponnya dengan mengirimkan isi file tersebut melalui network ke objek URL
tadi. Setelah mengirimkan data, server akan memutuskan koneksi ini.Untuk mengimplementasikan koneksi TCP/IP, paket
java.net
menyediakan dua kelas, yaitu ServerSocket
dan Socket
. Objek bertipe ServerSocket
melambangkan soket pendengar yang menunggu permintaan sambungan dari klien. Objek bertipe Socket
melambangkan sisi lain dari suatu sambungan, yang bisa berarti soket klien, atau bisa saja soket lain yang dibuat server untuk menangani permintaan dari klien. Dengan cara ini server bisa membuat beberapa soket dan menangani beberapa koneksi sekaligus. (Suatu ServerSocket
sendiri tidak berpartisipasi langsung pada koneksi itu sendiri; ia hanya bertugas untuk mendengarkan permintaan sambungan, dan membuat Socket
untuk melakukan koneksi yang sesungguhnya)Untuk menggunakan
Socket
dan ServerSocket
, kita harus tahu tentang alamat Internet. Program klien harus bisa menentukan komputer mana yang akan berkomunikasi dengannya. Setiap komputer pada internet memiliki alamat IP yang merupakan alamat unik setiap komputer di dalam internet. Komputer juga bisa memiliki nama domain seperti www.yahoo.com atau www.google.com.Suatu komputer bisa memiliki beberapa program untuk melakukan komunikasi network secara bersamaan, atau satu program mungkin berkomunikasi dengan beberapa komputer sekaligus. Agar bisa bekerja seperti ini, soket sebenarnya merupakan kombinasi antara alamat IP dan nomor port. Nomor port hanya merupakan bilangan bulat 16-bit (dari 0 hingga 216 - 1). Suatu server tidak hanya mendengar koneksi saja, akan tetapi ia mendengar koneksi dari port tertentu.
Klien yang ingin berkomunikasi dengan server harus mengetahui alamat Internet komputer beserta nomor port di mana server tersebut mendengarkan permintaan sambungan. Server web, misalnya, pada umumnya mendengarkan koneksi pada port 80; layanan internet lain juga memiliki nomor port standar. (Nomor port standar adalah nomor di bawah 1024. Jika kita membuat program server sendiri, kita sebaiknya menggunakan port benomor lebih besar dari 1024).
Ketika kita membuat objek bertipe
ServerSocket
, kita harus memberikan nomor port yang akan didengar oleh server. Konstruktornya memiliki bentuk sepertipublic ServerSocket(int port) throws IOException
ServerSocket
berhasil dijalankan, ia akan mulai mendengarkan permintaan sambungan. Metode accept()
dalam kelas ServerSocket
akan menerima permintaan tersebut, kemudian mempersiapkan sambungan dengan klien, dan mengembalikan objek Socket
yang bisa digunakan untuk berkomunikasi dengan klien. Metode accept()
memiliki bentuk sepertipublic Socket accept() throws IOException
accept()
, ia tidak akan mengembalikan hasilnya sebelum permintaan sambungan diterima (atau suatu kesalahan terjadi). Metode ini disebut "diblokade" ketika menunggu koneksi. (Ketika suatu metode diblokade, maka thread yang memanggil metode tersebut tidak bisa berbuat apa-apa. Akan tetapi thread lain di program yang sama masih bisa berjalan). ServerSocket
tersebut akan terus mendengar koneksi hingga ia ditutup menggunakan metode close()
atau hingga terjadi kesalahan.Misalnya kita akan membuat server yang akan mendengarkan port 1728, dan misalnya kita telah menulis metode baru
beriLayanan(Socket)
untuk menangani komunikasi dengan suatu klien. Maka bentuk sederhana dari program server adalah sebagai berikut :try { ServerSocket server = new ServerSocket(1728); while (true) { Socket koneksi = server.accept(); beriLayanan(koneksi); } } catch (IOException e) { System.out.println("Server dimatikan dengan pesan kesalahan: " + e); }
Socket
. Untuk melakukan koneksi ke server pada suatu alamat dan port tertentu, kita bisa menggunakan konstruktorpublic Socket(String komputer, int port) throws IOException
getInputStream()
dan getOutputStream()
pada Socket
untuk mengambil aliran input dan output yang bisa digunakan untuk komunikasi antara dua komputer.Berikut ini adalah kerangka untuk melakukan koneksi klien :
void koneksiKlien(String namaKomputer, int port) { // namaKomputer bisa berupa alamat IP atau nama domain // dari komputer yang bertindak sebagai server. // port adalah port dimana server mendengarkan koneksi, // misalnya 1728. Socket koneksi; InputStream in; OutputStream out; try { koneksi = new Socket(namaKomputer,port); in = koneksi.getInputStream(); out = koneksi.getOutputStream(); } catch (IOException e) { System.out.println( "Usah melakukan sambungan gagal, dengan kesalahan : " + e); return; } . . // Gunakan aliran in dan out untuk berkomunikasi dengan server . try { koneksi.close(); // (Atau, bisa juga bergantung pada server untuk // memutuskan sambungan) } catch (IOException e) { } } // akhir koneksiKlien()
Contoh Pemrograman pada Jaringan
Contoh ini melibatkan dua program, yaitu klien sederhana dan servernya. Klien melakukan koneksi dengan server, membaca satu baris teks dari server, kemudian menampilkan teks ini pada layar. Teks yang dikirim oleh server adalah tanggal dan waktu saat ini di komputer di mana server dijalankan.
Untuk membuka koneksi, klien harus tahu di komputer mana server dijalankan dan di port mana server tersebut mendengarkan permintaan sambungan. Server akan mendengarkan pada port bernomor 32007. Nomor port ini bisa berapapun di antara 1025 hingga 65535, asalkan klien dan servernya menggunakan port yang sama. Nomor port antara 1 hingga 1024 hanya digunakan oleh layanan standar dan seharusnya tidak digunakan untuk server lainnya.
Nama komputer atau alamat IP di mana server dijalankan harus diberikan pada paramater baris perintah. Misalnya jika server dijalankan pada komputer kita sendiri, kita bisa memanggilnya dengan "java KlienTanggal localhost". Berikut ini adalah program klien lengkapnya.
import java.net.*; import java.io.*; public class KlienTanggal { static final int PORT_PENDENGAR = 32007; /** * @param args */ public static void main(String[] args) { String komputer; // Nama komputer yang akan disambungkan Socket koneksi; // Soket untuk berkomunikasi dengan // komputer tersebut Reader masuk; // Aliran untuk membaca data dari koneksi /* Ambil nama komputer dari baris perintah */ if (args.length > 0) komputer = args[0]; else { // Tidak ada nama komputer yang diberikan // Beri pesan kesalahan dan program selesai System.out.println("Cara menggunakan : java KlienTanggal <server>"); return; } /* Buat koneksi, kemudian baca dan tampilkan di layar */ try { koneksi = new Socket( komputer, PORT_PENDENGAR ); masuk = new InputStreamReader( koneksi.getInputStream() ); while (true) { int ch = masuk.read(); if (ch == -1 || ch == '\n' || ch == '\r') break; System.out.print( (char)ch ); } System.out.println(); masuk.close(); } catch (IOException e) { System.out.println("Kesalahan : " + e); } } }
try ... catch
. Ini akan menangkap pengecualian IOException
yang mungkin terjadi ketika koneksi sedang dibuka atau ditutup atau sedang membaca karakter dari aliran input.Aliran yang digunakan adalah aliran sederhana
Reader
yang memiliki operasi input masuk.read()
. Fungsi ini membaca satu per satu karakter dari aliran, kemudian mengembalikan nomor kode Unicodenya. Jika akhir aliran telah dicapai, maka nilai -1 akan dikembalikan. Perulangan while membaca karakter ini satu per satu hingga akhir aliran ditemui atau akhir baris ditemui. Akhir baris ditandai dengan salah satu dari '\n' atau '\r' atau keduanya, tergantung dari jenis komputer di mana server tersebut berjalan.Agar program ini dapat berjalan tanpa kesalahan, maka program server harus dijalankan terlebih dahulu. Kita bisa membuat program klien dan server pada komputer yang sama. Misalnya kita bisa membuat dua jendela konsol pada windows, kemudian menjalankan server di konsol yang satu dan menjalankan klien di server yang lain. Agar ini bisa berjalan, komputer lokal kita memiliki alamat 127.0.0.1, sehingga perintah "java KlienTanggal 127.0.0.1" artinya sama dengan memerintahkan program KlienTanggal untuk melakukan sambungan dengan server yang berjalan di komputer yang sama. Atau bisa juga menggunakan alamat "localhost" sebagai pengganti "127.0.0.1".
Program servernya kita namakan
ServerTanggal
. Program ServerTanggal
membuat ServerSocket
untuk mendengarkan permintaan sambungan pada port 32007. Setelah soket pendengar kita buat, maka server akan masuk pada perulangan tak hingga di mana ia menerima dan mengolah permintaan sambungan. Program ini akan berjalan terus menerus tanpa henti kecuali kita hentikan dengan paksa -- misalnya dengan menekan tombol Ctrl-C di jendela konsol di mana server dijalankan.Ketika koneksi diterima dari klien, server akan memanggil subrutin lain untuk menangani koneksi tersebut. Dalam subrutin itu, pengecualian apapun yang terjadi akan ditangkap sehingga server tidak akan mati. Subrutin akan membuat aliran
PrintWriter
untuk mengirim data melalui koneksi yang terjadi.Server akan menulis tanggal dan waktu sekarang pada aliran output ini, kemudian menutup koneksi. (Kelas standar
java.util.Date
akan digunakan untuk mengambil tanggal saat ini. Objek bertipe Date
melambangkan tanggal dan waktu. Konstruktor standarnya, "new Date()
" membuat objek yang melambangkan tanggal dan waktu ketika objek tersebut dibuat.)Berikut ini adalah program server lengkapnya :
import java.net.*; import java.io.*; import java.util.Date; public class ServerTanggal { static final int PORT_PENDENGAR = 32007; /** * @param args */ public static void main(String[] args) { ServerSocket pendengar; // Mendengarkan sambungan yang masuk Socket koneksi; // Untuk berkomunikasi dengan sambungan yang masuk /* * Menerima dan mengolah sambungan selamanya, atau hingga kesalahan * terjadi. (Kesalahan yang terjadi ketika sedang berkomunikasi atau * mengirimkan tanggal akan ditangkap untuk mencegah server crash) */ try { pendengar = new ServerSocket(PORT_PENDENGAR); System.out.println("Mendengarkan pada port " + PORT_PENDENGAR); while (true) { koneksi = pendengar.accept(); kirimTanggal(koneksi); } } catch (Exception e) { System.out.println("Maaf, server telah mati."); System.out.println("Kesalahan : " + e); return; } } static void kirimTanggal(Socket klien) { // Parameternya, klien, adalah soket yang telah terhubung dengan // program lain. Ambil aliran keluaran untuk melakukan sambungan, // kirim tanggal saat ini dan tutup sambungan. try { System.out.println("Sambungan dari " + klien.getInetAddress().toString()); Date sekarang = new Date(); // Tanggal dan waktu saat ini PrintWriter keluar; // Aliran output untuk mengirim tanggal keluar = new PrintWriter(klien.getOutputStream()); keluar.println(sekarang.toString()); keluar.flush(); // Pastikan data telah terkirim! klien.close(); } catch (Exception e) { System.out.println("Kesalahan : " + e); } } }
ServerTanggal
pada konsol, maka ia akan diam menunggu datangnya permintaan sambungan dan melaporkannya apabila permintaan telah masuk. Agar layanan ServerTanggal
tetap tersedia pada suatu komputer, program tersebut seharusnya dijalankan sebagai daemon. Daemon adalah program yang terus berjalan pada suatu komputer, tidak peduli siapa yang menggunakan komputer itu. Komputer bisa dikonfigurasi untuk menjalankan daemon secara otomatis ketika komputer dinyalakan. Kemudian ia akan berjalan di latar belakang, meskipun komputer digunakan untuk hal lainnya. Misalnya, komputer yang menyediakan layanan Web menjalankan daemon yang mendengarkan permintaan sambungan untuk melihat halaman web dan meresponnya dengan mengirimkan isi halaman tersebut. Bagaimana menjalankan program sebagai daemon tidak akan kita bahas di sini, dan bisa Anda temui pada buku-buku tentang administrasi server dan jaringan.Lihat setelah memanggil
keluar.println()
untuk mengirim data ke klien, program server memanggil keluar.flush()
. Metode flush()
tersedia pada semua kelas aliran output. Metode ini digunakan untuk menjamin bahwa data yang telah dikirim pada aliran benar-benar dikirim ke tujuannya. Kita harus memanggil fungsi ini setiap kali kita menggunakan aliran output untuk mengirim data melalui jaringan. Jika tidak, ada kemungkinan program akan mengumpulkan banyak data dan mengirimkan semuanya sekaligus. Mungkin dari segi efisiensi terlihat bagus, akan tetapi tentunya pesan akan sangat lambat sampai di program klien. Atau bahkan masih ada data yang belum terkirim hingga soket ditutup.Berikut ini adalah screen shot hasil pemanggilan program di atas pada dua konsol, masing-masing untuk server dan kliennya.
Dan program di atas dapat diunduh pada daftar sisipan di bawah, dan diimpor ke dalam Eclipse dengan menggunakan instruksi pada halaman berikut.
Untuk menjalankan program di atas, jalankan program server terlebih dahulu, dari dalam konsol ketik "cd <nama_direktori_tempat_proyek_server_berada>\bin" (di screen shot di atas direktorinya berada di c:\belajarjava.lyracc.com\servertanggal\bin) kemudian ketik "java ServerTanggal".
Kemudian untuk menjalankan program klien, lakukan dengan cara yang serupa, yaitu buka konsol baru, kemudian ketik "cd <nama_direktori_tempat_proyek_klien_berada>\bin" (di screen shot di atas direktornya berada di c:\belajarjava.lyracc.com\klientanggal\bin) kemudian ketik "java KlienTanggal localhost".
Untuk mengetahui di direktori mana proyek ini berada pada Eclpse Anda, klik kanan proyek tersebut dari dalam Eclipse -> Properties, seperti pada screen shot berikut ini :
0 komentar:
Posting Komentar