Selasa, 07 Juni 2011

Pemrograman Socket

Socket adalah sebuah Class yang disediakan oleh beberapa bahasa pemrograman. Dengan socket, sebuah aplikasi  di suatu komputer dapat membuka koneksi untuk menghubungi aplikasi lain di komputer lainnya. Tentu saja aplikasi di komputer yang dihubungi menerima koneksi juga menggunakan socket. Dengan kata lain socket adalah suatu Class yang digunakan oleh aplikasi untuk saling berhubungan. Gambar 4.1 berikut ini menunjukkan bagaimana suatu aplikasi berhubungan dengan aplikasi lainnya

            Gambar 4.1. Komunikasi antar aplikasi menggunakan socket

Paradigma pada aplikasi jaringan berlaku model client-server. Aplikasi yang menginisialisasi koneksi, disebut aplikasi client. Sedangkan aplikasi yang menerima inisialisasi disebut sebagai aplikasi server. Oleh karena itu, jika kita membangun suatu aplikasi jaringan yang lengkap, maka kita harus membuat aplikasi client maupun aplikasi server.

Lebih lanjut mengenai socket, ada dua jenis socket yang bisa digunakan untuk membangun aplikasi, yakni TCP Socket dan UDP Socket. Perbedaan utamanya adalah, di model TCP digunakan konsep connection oriented dan reliable data transfer, sedangkan di model UDP digunakan konsep connectionless oriented dan unreliable data transfer. Sebuah aplikasi dapat menggunakan salah satu dari jenis Socket tersebut disesuaikan dengan peruntukan aplikasi tersebut. Aplikasi berbasis TCP biasanya adalah aplikasi yang membutuhkan ketepatan data hingga 100% tapi tidak memperdulikan lama pengiriman, sedangkan aplikasi berbasis UDP biasanya adalah aplikasi yang tidak terlalu mempedulikan ketepatan data tapi sangat peduli dengan delay pengiriman. Contoh aplikasi TCP adalah web browser, sedangkan UDP adalah Video Converence.

Untuk membangun aplikasi hal pertama yang perlu dilakukan adalah menganalisa jenis aplikasi kita, kebutuhan bandwidth, kebutuhan ketersampaian data dan sensitifitas terhadap delay. Berdasarkan hal ini kita bisa menentukan protokol apa yang kita gunakan, entah TCP atau UDP.

Pemrograman Socket menggunakan TCP
Cara kerja aplikasi yang menggunakan TCP dapat digambarkan oleh Gambar 4.2 di bawah ini:
            
            Gambar 4.2. Cara kerja aplikasi client dan server menggunakan TCP

Detil dari proses tersebut adalah:
  1. Untuk bisa melakukan koneksi client server, program server harus berjalan terlebih dahulu
  2. Di sisi server disediakan sebuah socket, yang disebut welcoming socket yang fungsinya untuk mendeteksi adanya permintaan koneksi dari sisi client.
  3. Di sisi client terdapat client socket. Jika ingin menghubungi server, maka melalui client socket-nya, client membuat inisialisai koneksi ke welcoming socket milik server, dengan mode three-way handshake.
  4. Setelah welcoming socket menerima inisialisasi koneksi dari client socket, aplikasi server akan membuat connection socket di sisi server. Dengan connection socket ini, client socket dan connection socket berinteraksi satu sama lain untuk mengirim dan menerima data.

Berikut adalah contoh aplikasi TCP dengan skenario:
  1. Client membaca inputan dari keyboard, kemudian mengirimkan hasilnya ke server melalui socket-nya.
  2. Server membaca data yang dikirim oleh client di connection socket
  3. Server mengubah data menjadi huruf besar
  4. Server mengirimkan data yang telah diubah menuju client melalui connection socket-nya.
  5. Client membaca data yang dikirim oleh server dari client socket-nya. Kemudian menampilkan data tersebut di monitor

Berikut adalah script aplikasi client berbasis Java untuk kasus di atas
TCPClient.java
import java.io.*;
import java.net.*;
class TCPClient {
    public static void main(String argv[]) throws Exception
    {
        String sentence;
        String modifiedSentence;
        BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
        Socket clientSocket = new Socket("hostname", 6789);
        DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream());
        BufferedReader inFromServer = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
        sentence = inFromUser.readLine();
        outToServer.writeBytes(sentence + '\n');
        modifiedSentence = inFromServer.readLine();
        System.out.println("FROM SERVER: " + modifiedSentence);
        clientSocket.close();
                  
    }
}

Berikut adalah script aplikasi server berbasis Java untuk kasus di atas
TCPServer.java
import java.io.*;
import java.net.*;
class TCPServer {
  public static void main(String argv[]) throws Exception
    {
      String clientSentence;
      String capitalizedSentence;
      ServerSocket welcomeSocket = new ServerSocket(6789);
 
      while(true) {
 
           Socket connectionSocket = welcomeSocket.accept();
           BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream()));
           DataOutputStream  outToClient = new DataOutputStream(connectionSocket.getOutputStream());
           clientSentence = inFromClient.readLine();
           capitalizedSentence = clientSentence.toUpperCase() + '\n';
           outToClient.writeBytes(capitalizedSentence);
        }
    }
}
 





Pemrograman Socket menggunakan UDP

Contoh aplikasi untuk UDP socket berikut ini menggunakan kasus yang sama dengan kasus yang digunakan oleh TCP socket, yakni:
  1. Client membaca inputan dari keyboard, kemudian mengirimkan hasilnya ke server melalui socket-nya.
  2. Server membaca data yang dikirim oleh client di connection socket
  3. Server mengubah data menjadi huruf besar
  4. Server mengirimkan data yang telah diubah menuju client melalui connection socket-nya.
  5. Client membaca data yang dikirim oleh server dari client socket-nya. Kemudian menampilkan data tersebut di monitor

Berikut adalah script aplikasi client berbasis Java untuk kasus di atas
UDPClient.java
import java.io.*;
import java.net.*;
 
class UDPClient {
    public static void main(String args[]) throws Exception
    {
 
      BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in));
 
      DatagramSocket clientSocket = new DatagramSocket();
 
      InetAddress IPAddress = InetAddress.getByName("hostname");
 
      byte[] sendData = new byte[1024];
      byte[] receiveData = new byte[1024];
 
      String sentence = inFromUser.readLine();
 
      sendData = sentence.getBytes();
      DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 9876);
 
      clientSocket.send(sendPacket);
 
      DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
 
      clientSocket.receive(receivePacket);
 
      String modifiedSentence = new String(receivePacket.getData());
 
      System.out.println("FROM SERVER:" + modifiedSentence);
      clientSocket.close();
 
    }
}

Berikut adalah script aplikasi server berbasis Java untuk kasus di atas
UDPServer.java
import java.io.*;
import java.net.*;
 
class UDPServer {
  public static void main(String args[]) throws Exception
    {
 
      DatagramSocket serverSocket = new DatagramSocket(9876);
 
      byte[] receiveData = new byte[1024];
      byte[] sendData  = new byte[1024];
 
      while(true)
        {
 
          DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
 
          serverSocket.receive(receivePacket);
 
          String sentence = new String(receivePacket.getData());
 
          InetAddress IPAddress = receivePacket.getAddress();
 
          int port = receivePacket.getPort();
 
          String capitalizedSentence = sentence.toUpperCase();
          sendData = capitalizedSentence.getBytes();
 
          DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, port);
 
          serverSocket.send(sendPacket);
        }
    }
}
Perbedaan utama antara aplikasi berbasis TCP dengan aplikasi berbasis UDP adalah di aplikasi UDP tidak ada welcoming socket. Pada UDP tidak ada socket khusus untuk permintaan inisialisai koneksi. Setiap data yang datang ditangani lansung oleh server socket.

File Sharing pada Ubuntu


File sharing merupakan salah satu fitur yang sekarang telah dimiliki oleh berbagai macam sistem operasi, terutama sistem operasi yang mendukung sistem jaringan. Metode/teknologi yang digunakan untuk melakukan sharing ada berbagai macam. Bisa jadi kita menggunakan teknologi ftp, http, peer to peer dan juga sharing resouce seperti folder dan file secara langsung. Untuk yang disebutkan terakhir, bagi para pengguna sistem operasi windows dapat dengan mudah menyettingnya dengan klik kanan lalu pilih “Sharing and Security”, namun pada sistem operasi berbasis linux kita harus memastikan bahwa ada server samba yang mengatur sharing file dan folder. Berikut langkah-langkah untuk melakukan sharing file dan folder di sistem operasi linux Ubuntu. Semua langkah-langkah berikut ini dilakukan pada mode terminal.

1.       Menginstall samba server untuk mengaktifkan Server Samba untuk keperluan sharing file atau folder
sudo apt-get install samba smbfs

2.       Menambah / mengubah / menghapus network users
                                                               i.      Tambahkan system user yang baru dengan menjalankan perintah
sudo useradd namamu
                                                             ii.      Untuk menambahkan network user
sudo smbpasswd -a system_username
gksudo gedit /etc/samba/smbusers
                                                            iii.      Ketikkan baris berikut ini pada file yang baru
system_username = “network username”
                                                           iv.      Simpan file yang telah diedit
                                                             v.      Untuk mengedit network user
sudo smbpasswd -a system_username
                                                           vi.      Untuk menghapus network user
sudo smbpasswd -x system_username

3.       Sharing home folder dengan read only permission (Authentication = Yes)
                                                               i.      Buka file smb.conf, namun sebaiknya kita backup dulu sebelum diedit
sudo cp /etc/samba/smb.conf /etc/samba/smb.confbackup
gksudo gedit /etc/samba/smb.conf
                                                             ii.      Cari baris berikut ini
....
;   security = user
....
                                                            iii.      Gantikan dengan baris berikut ini
security = user
username map = /etc/samba/smbusers
                                                           iv.      Simpan file konfigurasi yang sudah diubah
                                                             v.      Lakukan test parameter dan restart server samba
sudo testparam
sudo /etc/init.d/samba restart

4.       Sharing home folder dengan read dan write permission (Authentication = Yes)
                                                               i.      Buka file smb.conf, namun sebaiknya kita backup dulu sebelum diedit
sudo cp /etc/samba/smb.conf /etc/samba/smb.confbackup
gksudo gedit /etc/samba/smb.conf
                                                             ii.      Cari baris berikut ini
....
;   security = user
....
                                                            iii.      Gantikan dengan baris berikut ini
security = user
username map = /etc/samba/smbusers
                                                           iv.      Cari baris berikut ini
...
# By default, the home directories are exported read-only. Change next
# parameter to 'yes' if you want to be able to write to them.
writable = no
...
                                                             v.      Gantikan dengan baris berikut ini
...
# By default, the home directories are exported read-only. Change next
# parameter to 'yes' if you want to be able to write to them.
writable = no
...
                                                           vi.      Simpan file konfigurasi yang sudah diubah
                                                          vii.      Lakukan test parameter dan restart server samba
sudo testparam
sudo /etc/init.d/samba restart

5.       Sharing group folder dengan read only permission (Authentication = Yes)
                                                               i.      Buat folder baru dengan nama group, kemudian ubah modenya
                                        sudo mkdir /home/group
                                        sudo chmod 777 /home/group/
                                                             ii.      Buka file smb.conf, namun sebaiknya kita backup dulu sebelum diedit
sudo cp /etc/samba/smb.conf /etc/samba/smb.confbackup
gksudo gedit /etc/samba/smb.conf
                                                            iii.      Cari baris berikut ini
....
;   security = user
....
                                                           iv.      Gantikan dengan baris berikut ini
security = user
username map = /etc/samba/smbusers
                                                             v.      Tambahkan baris berikut pada akhir file
[Group]
  comment = Group Folder
  path = /home/group
  public = yes
  writable = no
  valid users = system_username1 system_username2
  create mask = 0700
  directory mask = 0700
  force user = nobody
  force group = nogroup
                                                           vi.      Simpan file konfigurasi yang sudah diubah
                                                          vii.      Lakukan test parameter dan restart server samba
sudo testparam
sudo /etc/init.d/samba restart
 
6.       Sharing group folder dengan read dan write permission (Authentication = Yes)
                                                               i.      Buat folder baru dengan nama group, kemudian ubah modenya
                                        sudo mkdir /home/group
                                        sudo chmod 777 /home/group/
                                                             ii.      Buka file smb.conf, namun sebaiknya kita backup dulu sebelum diedit
sudo cp /etc/samba/smb.conf /etc/samba/smb.confbackup
gksudo gedit /etc/samba/smb.conf
                                                            iii.      Cari baris berikut ini
....
;   security = user
....
                                                           iv.      Gantikan dengan baris berikut ini
security = user
username map = /etc/samba/smbusers
                                                             v.      Tambahkan baris berikut pada akhir file
[Group]
  comment = Group Folder
  path = /home/group
  public = yes
  writable = yes
  valid users = system_username1 system_username2
  create mask = 0700
  directory mask = 0700
  force user = nobody
  force group = nogroup
                                                           vi.      Simpan file konfigurasi yang sudah diubah
                                                          vii.      Lakukan test parameter dan restart server samba
sudo testparam
sudo /etc/init.d/samba restart
 
7.       Sharing public folder dengan read only permission (Authentication = Yes)
                                                               i.      Buat folder baru dengan nama group, kemudian ubah modenya
                                        sudo mkdir /home/public
                                        sudo chmod 777 /home/public/
                                                             ii.      Buka file smb.conf, namun sebaiknya kita backup dulu sebelum diedit
sudo cp /etc/samba/smb.conf /etc/samba/smb.confbackup
gksudo gedit /etc/samba/smb.conf
                                                            iii.      Cari baris berikut ini
....
;   security = user
....
                                                           iv.      Gantikan dengan baris berikut ini
security = user
username map = /etc/samba/smbusers
                                                             v.      Tambahkan baris berikut pada akhir file
[Group]
  comment = Public Folder
  path = /home/public
  public = yes
  writable = no
  create mask = 0700
  directory mask = 0700
  force user = nobody
  force group = nogroup
                                                           vi.      Simpan file konfigurasi yang sudah diubah
                                                          vii.      Lakukan test parameter dan restart server samba
sudo testparam
sudo /etc/init.d/samba restart
 
8.       Sharing public folder dengan read dan write permission (Authentication = Yes)
                                                               i.      Buat folder baru dengan nama group, kemudian ubah modenya
                                        sudo mkdir /home/public
                                        sudo chmod 777 /home/public/
                                                             ii.      Buka file smb.conf, namun sebaiknya kita backup dulu sebelum diedit
sudo cp /etc/samba/smb.conf /etc/samba/smb.confbackup
gksudo gedit /etc/samba/smb.conf
                                                            iii.      Cari baris berikut ini
....
;   security = user
....
                                                           iv.      Gantikan dengan baris berikut ini
security = user
username map = /etc/samba/smbusers
                                                             v.      Tambahkan baris berikut pada akhir file
[Group]
  comment = Public Folder
  path = /home/public
  public = yes
  writable = yes
  create mask = 0700
  directory mask = 0700
  force user = nobody
  force group = nogroup
                                                           vi.      Simpan file konfigurasi yang sudah diubah
                                                          vii.      Lakukan test parameter dan restart server samba
sudo testparam
sudo /etc/init.d/samba restart

9.       Sharing public folder dengan read only permission (Authentication = No)
                                                               i.      Buat folder baru dengan nama group, kemudian ubah modenya
                                        sudo mkdir /home/public
                                        sudo chmod 777 /home/public/
                                                             ii.      Buka file smb.conf, namun sebaiknya kita backup dulu sebelum diedit
sudo cp /etc/samba/smb.conf /etc/samba/smb.confbackup
gksudo gedit /etc/samba/smb.conf
                                                            iii.      Cari baris berikut ini
....
;   security = user
....
                                                           iv.      Gantikan dengan baris berikut ini
security = share
                                                             v.      Tambahkan baris berikut pada akhir file
[Group]
  comment = Public Folder
  path = /home/public
  public = yes
  writable = no
  create mask = 0700
  directory mask = 0700
  force user = nobody
  force group = nogroup
                                                           vi.      Simpan file konfigurasi yang sudah diubah
                                                          vii.      Lakukan test parameter dan restart server samba
sudo testparam
sudo /etc/init.d/samba restart

10.   Sharing public folder dengan read dan write permission (Authentication = No)
                                                               i.      Buat folder baru dengan nama group, kemudian ubah modenya
                                        sudo mkdir /home/public
                                        sudo chmod 777 /home/public/
                                                             ii.      Buka file smb.conf, namun sebaiknya kita backup dulu sebelum diedit
sudo cp /etc/samba/smb.conf /etc/samba/smb.confbackup
gksudo gedit /etc/samba/smb.conf
                                                            iii.      Cari baris berikut ini
....
;   security = user
....
                                                           iv.      Gantikan dengan baris berikut ini
security = share
                                                             v.      Tambahkan baris berikut pada akhir file
[Group]
  comment = Public Folder
  path = /home/public
  public = yes
  writable = yes
  create mask = 0700
  directory mask = 0700
  force user = nobody
  force group = nogroup
                                                           vi.      Simpan file konfigurasi yang sudah diubah
                                                          vii.      Lakukan test parameter dan restart server samba
sudo testparam 
sudo /etc/init.d/samba restart