APLIKASI CLIENT SERVER
Apa itu Soket?
Soket merupakan fasilitas IPC (Inter Proses Communication) untuk aplikasi jaringan.
Model komunikasi dengan soket digambarkan pada gambar dibawah ini.
Apa itu Soket?
Soket merupakan fasilitas IPC (Inter Proses Communication) untuk aplikasi jaringan.
Model komunikasi dengan soket digambarkan pada gambar dibawah ini.
Agar suatu soket dapat
berkomunikasi dengan soket lainnyanya, maka soket butuh diberi suatu alamat
unik sebagai identifikasi. Alamat soket terdiri dari Alamat IP dan Nomer Port. Contoh alamat soket
adalah 192.10.10.1 : 5000, dimana nomer 5000 adalah nomer portnya.
Alamat IP dapat menggunakan alamat Jaringan Lokal (LAN) maupun alamat internet.
Jadi soket dapat digunakan untuk IPC
pada LAN maupun Internet. Mengapa
dibutuhkan nomer port? Apakah nomer IP komputer tujuan saja tidak cukup? Nomer
port dibutuhkan karena proses yang berjalan pada suatu komputer umumnya lebih
dari satu. Sehingga dibutuhkan tambahan informasi sebagai identifikasi proses
yang hendak dihubungi. Jika IP computer diibaratkan adalah nomer telepon suatu
perusahaan, maka nomer port adalah nomer ekstensinya. Suatu proses yang hendak berkomunikasi dengan
proses lain lewat mekanisme soket haruslah mengikatkan dirinya dengan salah
satu port pada komputerny. Pengikatan
diri ini disebut dengan binding.
Java menyediakan obyek Socket
dan ServerSocket untuk komunikasi soket TCP. ServerSocket
digunakan pada sisi aplikasi server, sedangkan
Socket digunakan baik pada sisi aplikasi server maupun client. Berikut ini akan saya demokan
pengiriman objek melalui socket, namun syaratnya objek yang akan dikirimkan
melalui socket haruslah mengimplementasikan
Serializable.
Pertama buat 3 buah project.
- Sebagai server
- Sebagai client
- Sebagai tempat penampung kelas yang objeknya akan dikirim.
pertama kali kita buat form seperti gambar diatas. setelah itu deklarasikan variabel yang dibutuhkan yaitu :
public abstract class clientdanserver extends javax.swing.JFrame implements Runnable{
Socket client;
ServerSocket server;
BufferedReader Server_Reader,Client_Reader;
BufferedWriter ServerWriter, Client_Writer;
implements Runnable ditambahkan pada saat proses pada button menambahkan fungsi Thread
thread disediakan oleh java untuk membuat aplikasi yang tangguh, karena memunyai fungsi dan tugas tersendiri. dengan adanya thread kita dapat membagi proses pada waktu bersamaan. thread biasa digunakan pada pemograman multitasking, networking.
kemudian kita masukkan fungsi-fungsi untuk koneksi dengan menggunakan syntax seperti dibawah
private void client_connection ()
{
try {
String ip = JOptionPane.showInputDialog("masukkan IP Adress");
client = new Socket(ip, 2000);
Combo_Box.setEnabled(false);
Button_On.setText("disconnect");
Server_Reader = new BufferedReader(new InputStreamReader(client.getInputStream()));
Server_Writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
} catch (UnknownHostException ex) {
System.out.println("accept failed");
System.exit(-1);
} catch (IOException ex) {
Logger.getLogger(form.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void read_connection()
{
try {
try {
try {
server = new ServerSocket(2000);
this.setTitle("please wait...");
} catch (IOException ex) {
System.out.println("couldn't listen");
System.exit(-1);
}
client = server.accept();
this.setTitle("connected" + client.getInetAddress());
} catch (IOException ex) {
System.out.println("accept failed");
System.exit(-1);
}
Server_Reader = new BufferedReader(new InputStreamReader(client.getInputStream()) );
Server_Writer = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()));
} catch (IOException ex) {
System.out.println("read filed");
System.exit(-1);
}
}
private void disconnected_by_client()
{
try {
client.close();Server_Reader.close(); Server_Writer.close();
Combo_Box.setEnabled(true);
Button_On.setText("connect");
} catch (IOException ex) {
Logger.getLogger(form.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void stopped_by_server()
{
try {
Server_Reader.close();
Server_Writer.close();
Button_On.setText("ON");
this.setTitle("disconnected");
} catch (IOException ex) {
Logger.getLogger(form.class.getName()).log(Level.SEVERE, null, ex);
}
}
pada bagian yang digaris bawahi merupakan syntax yang diketikkan. dan sisanya kita klik tanda balon (warning) kemudian pilih surround block with try catch.
pada bagian proses untuk komponen pallete digunakan syntax sebagai berikut
private void Combo_BoxItemStateChanged(java.awt.event.ItemEvent evt) {
if (Combo_Box.getSelectedItem().equals("server"))
{
Button_On.setText("ON");
Text_Username.setText("Server");
}
else
{
Button_On.setText("Connect");
Text_Username.setText("Client");
}
}
private void Button_OnActionPerformed(java.awt.event.ActionEvent evt) {
if (Button_On.getText().equals("Connect"))
{
Button_On.setText("DIsconnect");
client_connection();
Thread thread = new Thread(this) ;
thread.start();
}
else if (Combo_Box.getSelectedItem().equals("Server"))
{
Button_On.setText("Off");
read_connection();
Thread thread = new Thread(this);
thread.start();
}
else if (Button_On.getText().equals("Disconnect"))
{
disconnected_by_client();
}
else if(Button_On.getText().equals("off"))
{
stopped_by_server();
}
}
private void Button_SendActionPerformed(java.awt.event.ActionEvent evt) {
try {
// TODO add your handling code here:
Server_Writer.write(Text_Username.getText() + ": " + Text_Chat.getText());
Server_Writer.newLine();
Server_Writer.flush();
} catch (IOException ex){
Logger.getLogger(form.class.getName()).log(Level.SEVERE, null,ex);
}
List_chat.add("me: " + Text_Chat.getText());
Text_Chat.setText("" + Text_Chat.getText());
}
untuk lebih jelasnya dapat dilihat pada video tutorial CLICK TO VIEW THE VIDEO TUTORIAL