Sebelum memulai tutorial sesuai judul di atas, sebenernya
apa sih socket itu? Sederhananya socket adalah object / class pada end system yang
berfungsi melakukan bind terhadap
suatu port dari komunikasi dua arah yang terjadi pada suatu jaringan. Port-nya sendiri dapat kita yang tentukan sendiri atau pun
menggunakan port yang sudah ada yang
tentunya sesuai aturan yang telah ada.
Berarti program socket itu? program socket itu sendiri adalah program yang dapat
menghubungkan antar proses baik dalam satu end system maupun tidak.
Pada program ini server hanya akan me-listen program client dan menjawab client sesuai input dari program client sementara client akan memiliki contoh output dan kasus seperti di bawah:
Client (C), Server (S)
kasus 1:
C: ini client
S: ini server, masukkan username
C: admin
S: selamat datang admin
kasus 2:
C: ini client
S: ini server, masukkan username
C: user
S: selamat datang user
kasus 3:
C: ini client
S: ini server, masukkan username
C: saya
S: username tidak diketahui
kasus 4:
C: saya
S: perintah tidak diketahui
kasus 5:
C: exit
(kedua program client - server keluar )
Berikut source code dan penjelasan program server nya
package tugas_server; import java.io.IOException; // ObjectInputStream merupakan suatu class dari java yang berguna untuk // membaca object/data (contoh string) yang diinputkan dari program lain import java.io.ObjectInputStream; // ObjectOutputStream merupakan suatu class dari java yang berguna untuk // menuliskan object/data (contoh string) untuk dibaca program lain import java.io.ObjectOutputStream; // ServerSocket adalah class socket khusus untuk server import java.net.ServerSocket; // Socket adalah class socket biasa import java.net.Socket; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author Agung */ public class Tugas_Server { /** * @param args the command line arguments */ public static void main(String[] args) { try { // Inisialisasi Object ServerSocket dengan me-set port 5111. ServerSocket ss = new ServerSocket(5111); // Deklarasi socket yang nantinya akan menampung socket dari user. Socket s; // Deklarasi string yang untuk menampung hasil bacaan dari client. String balasan; String balasan2; // Inisialisasi Object Input dan Output Stream. ObjectInputStream in = null; ObjectOutputStream out = null; // Fungsi bawaan dari class ServerSocket yang me-return object socket // Fungsi ini menandakan bahwa program client dan server sudah terhubung s = ss.accept(); // Mengalokasi memory baru untuk ObjectOutputStream. out = new ObjectOutputStream(s.getOutputStream()); // Fungsi bawaan ObjectOutputStream untuk membersihkan isi memory. out.flush(); // Mengalokasi memory baru untuk ObjectInputStream. in = new ObjectInputStream(s.getInputStream()); balasan = ""; balasan2 = ""; while(true) { balasan = ""; balasan2 = ""; balasan = ReadMessage(in); // Program akan berhenti sampai ada input "exit" dari client. if(balasan.equals("exit")) break; else { if(balasan.equals("ini client")) { SendMessage("ini server, masukkan username", out); balasan2 = ReadMessage(in); if(balasan2.equals("admin")) SendMessage("selamat datang admin", out); else { if(balasan2.equals("user")) SendMessage("selamat datang user", out); else SendMessage("username tidak diketahui", out); } } else { SendMessage("perintah tidak diketahui", out); } } } // Menutup semua stream dan socket. in.close(); out.close(); s.close(); ss.close(); } catch (IOException ex) { Logger.getLogger(Tugas_Server.class.getName()).log(Level.SEVERE, null, ex); } } // Fungsi untuk membaca input dari client. public static String ReadMessage(ObjectInputStream in) { String reader = ""; try { reader = (String) in.readObject(); } catch (IOException ex) { Logger.getLogger(Tugas_Server.class.getName()).log(Level.SEVERE, null, ex); } catch (ClassNotFoundException ex) { Logger.getLogger(Tugas_Server.class.getName()).log(Level.SEVERE, null, ex); } System.out.println(reader); // Fungsi ini me-return nilai string hasil bacaan. return reader; } // Fungsi untuk mengirim object / data kepada client public static void SendMessage(String word, ObjectOutputStream out) { try { out.writeObject(word); // Pembersihan isi memori untuk nantinya digunakan kembali memori tersebut. out.flush(); } catch (IOException ex) { Logger.getLogger(Tugas_Server.class.getName()).log(Level.SEVERE, null, ex); } } }
Berikut source code dan penjelasan program client nya
package tugas_client; // Scanner merupakan class pada java untuk mengambil input dari keyboard. import java.util.Scanner; import java.io.IOException; // Sama seperti pada program server import java.io.ObjectInputStream; import java.io.ObjectOutputStream; // Hanya membutuhkan class socket biasa import java.net.Socket; import java.util.logging.Level; import java.util.logging.Logger; /** * * @author Agung */ public class Tugas_Client { /** * @param args the command line arguments */ public static void main(String[] args) throws IOException { // Pertama lakukan inisialisasi class socket. Socket s = new Socket("localhost", 5111); // localhost merupakan lokasi program server yang akan berhubungan (me-listen). // sedangkan 5111 merupakan port yang digunakan program server // untuk dapat terhubung dengan program server maka port harus sama // Inisialisasi Object Input dan Output Stream. ObjectInputStream in = null; ObjectOutputStream out = null; // Inisialisasi Object Scanner dengan mengalokasikan memori baru. Scanner scanf = new Scanner(System.in); // Inisialisasi dan Deklarasi variabel yang akan menampung inputan // yang akan dikirim dan hasil bacaan yang diterima dari program server String input = ""; String balasan; String balasan2; // Mengalokasi memory baru untuk ObjectOutputStream. out = new ObjectOutputStream(s.getOutputStream()); // Fungsi bawaan ObjectOutputStream untuk membersihkan isi memory. out.flush(); // Mengalokasi memory baru untuk ObjectInputStream. in = new ObjectInputStream(s.getInputStream()); balasan = ""; balasan2 = ""; while(true) { balasan = ""; balasan2 = ""; input = scanf.nextLine(); SendMessage(input, out); if(input.equals("exit")) break; else { balasan = ReadMessage(in); if(balasan.equals("ini server, masukkan username")) { input = scanf.nextLine(); SendMessage(input, out); balasan2 = ReadMessage(in); } } } // Menutup semua stream dan socket. in.close(); out.close(); s.close(); } // Fungsi untuk mengirim input kepada server. public static void SendMessage(String word, ObjectOutputStream out) { try { out.writeObject(word); // Pembersihan isi memori untuk nantinya digunakan kembali memori tersebut. out.flush(); } catch (IOException ex) { Logger.getLogger(Tugas_Client.class.getName()).log(Level.SEVERE, null, ex); } } // Fungsi untuk membaca balasan dari server. public static String ReadMessage(ObjectInputStream in) { String reader = ""; try { reader = (String) in.readObject(); } catch (IOException ex) { Logger.getLogger(Tugas_Client.class.getName()).log(Level.SEVERE, null, ex); } catch (ClassNotFoundException ex) { Logger.getLogger(Tugas_Client.class.getName()).log(Level.SEVERE, null, ex); } System.out.println(reader); // Fungsi ini me-return nilai string hasil bacaan. return reader; } }
Sekian post gw ini. Semoga membantu. Jaa Ne!! :D
min yang di client yang localhost itu kok gak bisa ya
BalasHapus