Pemrograman Jaringan 1 M O D U L 4 TCP SOCKETS PROGRAMMING A G R Y A L F I A H, S T., U N I V E R S I T A S G U N A D A R M A TCP socket adalah sebuah soket yang memiliki sifat antara lain : Connection-oriented Sebelum data dapat ditransmisikan antara dua host, dua proses yang berjalan pada lapisan aplikasi harus melakukan negosiasi untuk membuat sesi koneksi terlebih dahulu. Full-duplex Data dapat secara simultan diterima dan dikirim. Reliable 2 Data yang dikirimkan ke sebuah koneksi TCP akan diurutkan dengan sebuah nomor urut paket dan akan mengharapkan paket positive acknowledgment dari penerima. Byte stream TCP melihat data yang dikirimkan dan diterima melalui dua jalur masuk dan jalur keluar TCP sebagai sebuah byte stream yang berdekatan (kontigu). 1
Java Socket 3 Socket adalah sebuah abstraksi perangkat lunak yang digunakan sebagai suatu "terminal" dari suatu hubungan antara dua mesin atau proses yang saling berinterkoneksi. Socket biasa digunakan untuk pemrograman berbasis client-server yang dapat menggunakan socket TCP/I atau socket UDP Pada J2SE telah disediakan package java.net berisi kelas-kelas dan interface yang menyediakan API(Application Programming Interface), level rendah (Socket, ServerSocket, DatagramSocket) dan level tinggi (URL, URLConnection). Memungkinkan programmer membuat program yang dapat mengakses server di Internet Memungkinkan programmer membuat server Internet (jaringan) sendiri INGAT: Socket akan membangun komunikasi antar proses yang sama-sama aktif. 4 Java Socket class digunakan di server maupun di client Java program yang biasanya digunakan dalam socket client memperlihatkan beberapa kebiasaan yaitu : 1. Membuat socket baru dengan constructor 2. Socket membuat koneksi ke remote machine 3. Sekali koneksi dibangun maka antara host yang satu dengan yang lainnya 2
5 Berikut adalah ilustrasi komunikasi antara 2 mesin dengan menggunakan socket : Kombinasi yang membentuk socket : 6 Protocol Transport protocol, raw IP, atau yang lainnya Local socket address Local IP address dan port number Remote socket address Hanya untuk membangun TCP socket 3
Tipe-tipe socket : 7 Datagram socket Connectionless socket, menggunakan UDP Stream socket Connection-oriented socket, menggunakan TCP atau Stream control transmission protocol (SCTP). Raw socket (Raw IP socket) Biasanya terdapat pada router dan peralatan network lainnya Membaca dari dan menulis ke socket : 8 1. Membuka suatu socket. 2. Membuka suatu input stream and output stream ke socket. 3. Membaca dari dan menulis ke stream berdasarkan protocl server. 4. Menutup stream. 5. Menutup socket. 4
Kelas Socket 9 Socket(InetAddress address, int port) Membuat sebuah stream socket dan koneksi ke suatu nomor port pada suatu komputer yang memiliki alamat IP. Socket(String Host, int port) Membuat stream socket dan juga koneksi ke suatu port komputer berdasarkan nama komputernya. Socket(String host, int port, InetAddress localaddr, int localport); membuat sebuah socket dan mengkoneksikannya ke port yang dituju pada alamat IP yang disebutkan pada parameter address atau nama host. Melakukan bind socket ke alamat lokal dan port lokal. (Jika koneksi antara client dan server membutuhkan nomor port yang sudah ditentukan. 10 getinetaddress() Untuk mendapatkan nama host yang dituju dan alamat Ipnya getport() Untuk mendapatkan nomor remote host getlocalport() Untuk mendapatkan nomor port localhost getlocaladdress() Untuk mendapatkan alamat local dimana socket digunakan getinputstream() Mengembalikan objek input stream dari socket 5
11 getoutputstream() Mengembalikan objek output stream ke socket setsotimeout(int timeout) getsotimeout() Kedua method tersebut digunakan untuk memberi (set) dan mengambil (get) nilai opsi Socket untuk time out block (dalam milidetik) reading dari socket (SO_TIMEOUT). Jika dalam waktu timeout tidak mendapat suatu nilai maka, akan dilemparkan ke exception java.net.sockettimeoutexception. Nilai default timeoutnya adalah 0, yang berarti tanpa batas. settcpnodelay(boolean on) gettcpnodelay() 12 Kedua method ini digunakan untuk memberi dan mengambil nilai opsi Socket TCP_NODELAY TCP_NODELAY yaitu untuk mengaktifkan atau menonaktifkan Algoritma Nagle (RFC 896) Algoritma Nagle (RFC 896), yaitu algoritma yang membuat TCP lebih efisien dalam konsumsi bandwidth dengan cara memperlambat penulisan data dalam ukuran yang kecil sehingga data-data yang ada dapat terkirimkan dalam suatu paket dengan ukuran besar. Nilai default opsi ini adalah aktif. Namun jika diinginkan adanya pengurangan network latency (waktu delay dalam pengiriman paket) dan meningkatkan unjuk kerja, maka opsi ini harus di nonaktifkan (di set dengan nilai false), namun akibatnya konsumsi bandwidth akan bertambah besar. 6
13 setsolinger(boolean on, int linger) getsolinger() Method tersebut akan mengaktifkan (true) atau menonaktifkan (false) opsi SO_LINGER dengan nilai waktu linger dalam milidetik. Opsi ini berpengaruh ketika socket ditutup, yaitu menentukan nilai waktu maksikum koneksi yang masih akan dipertahankan sampai socket koneksi benarbernar ditutup. Hal ini berguna untuk mengirim dan memberikan ACK (acknowledge) terhadap data yang belum terkirim. setsendbuffersize(int size) getsendbuffersize() Method ini akan mengatur dan mengambil informasi tentang ukuran buffer SO_SNDBUF, yaitu buffer untuk mengiriman. Ukuran ini juga harus disesuaikan ukuran buffer pada level network. 14 setreceivebuffersize(int size) getreceivebuffersize() Method ini digunakan jika Anda ingin mengatur ukuran buffer SO_RCVBUF SO_RCVBUF yaitu buffer yang digunakan untuk menampung paket yang masuk. Ukuran buffer ini juga digunakan untuk mengatur ukuran window yang diterapkan oleh TCP untuk flow controlnya (sliding window). Dalam pemanfaatan opsi ini, perlu dipastikan antara RCVBUF client dengan server ada sinkronisasi, sehingga sebelum server membind port yang akan digunakan ke socket (TCP) ataupun sebelum client membuka koneksi ke server, terlebih dahulu opsi ini harus di atur, jika Anda ingin mengaturnya. 7
Kelas-kelas Exception yang dibangkitkan Socket, ketika ada kesalahan : 15 SocketException Kelas ini merupakan kelas yang diturunkan dari kelas IOException. Kelas exception ini dipanggil atau dipicu ketika ada kegagalan dalam pemakaian socket, Contoh adalah kegagalan dalam protokol TCP. BindException Exception ini akan dipanggil ketika ada port lokal yang akan digunakan sudah terpakai oleh yang lain, atau ada kegagalan dalam permintaan untuk menggunakan alamat. 16 Lanj.. Kelas-kelas Exception yang dibangkitkan Socket, ketika ada kesalahan : ConnectException Exception ini akan dipanggil ketika sebuah koneksi ditolak oleh host yang dituju, oleh karena tidak ada proses yang siap menerima data pada port yang dituju. NoRouteToHostException Koneksi yang akan dibangun tidak dapat dipenuhi oleh karena melebihi waktu timeout yang tersedia atau host yang dituju tidak dapat dicapai (unreachable). 8