Mengenal
Socket
Bayangkan
sebuah server game online yang berkomunikasi tanpa henti, dimainkan oleh entah
berapa banyak client yang tersebar. Ini merupakan salah satu contoh aplikasi
dari sekian banyak aplikasi yang menggunakan socket jaringan untuk saling
berkomunikasi dan bertukar data.
Komunikasi
socket jaringan memang tidak mengenal lelah, pertukaran data terjadi
terus-menerus dan memegang peranan vital. Jika oleh karena suatu hal komunikasi
berhenti karena maintenance, kerusakan, ataupun sebab lainnya, maka dapat dipastikan
para penggunanya akan kecewa.
Maka dari
itu, komunikasi jaringan selalu diusahakan tidak terhenti. Demikianlah tugas
berat yang harus dilakukan socket jaringan. Sebelum membahas lebih jauh, apakah
sebenarnya pengertian socket itu?
Pengertian
socket adalah interface pada jaringan yang menjadi titik komunikasi antarmesin
pada Internet Protocol, dan tentunya tanpa komunikasi ini, tidak akan ada
pertukaran data dan informasi jaringan.
Socket
terdiri dari elemen-elemen utama sebagai berikut:
1. Protokol.
2. Local IP.
3. Local
Port.
4. Remote
IP.
5. Remote
Port.
Dalam
komunikasi antara dua pihak, tentunya harus digunakan kesepakatan aturan dan
format yang sama agar komunikasi dapat dimengerti. Seperti halnya dua orang
yang menggunakan bahasa yang sama, maka bahasa di sini berfungsi sebagai
protokol. Protokol yang digunakan dalam socket dapat menggunakan TCP ataupun
UDP.
Contoh
komunikasi sederhana adalah komunikasi antara komputer A dan komputer B. Baik
komputer A maupun komputer B harus memiliki identitas unik, yang
direpresentasikan oleh IP masing-masing.
Komunikasi
yang terjadi melalui port, sehingga baik komputer A maupun komputer B harus
memiliki port yang dapat diakses satu sama lain.
TCP dan UDP
Pemrograman
socket adalah cara untuk menggunakan komponen/API (Application Programming
Interface) socket untuk membuat sebuah aplikasi.
Aplikasi
socket umumnya terdiri dari dua kategori berdasarkan pengiriman datanya, yaitu:
1. Datagram
socket (menggunakan UDP).
2. Stream
socket (menggunakan TCP).
Terdapat
perlakuan yang berbeda antara UDP dan TCP, walaupun sama-sama berfungsi sebagai
protokol pertukaran data.
UDP tidak
memerlukan proses koneksi terlebih dahulu untuk dapat mengirimkan data,
paket-paket data yang dikirimkan UDP bisa jadi melalui rute yang berbeda-beda,
sehingga hasil yang diterima bisa jadi tidak berurutan.
Contohnya
jika aplikasi socket pengirim mengirimkan berturut-turut pesan 1, pesan 2, dan
pesan 3, maka aplikasi socket penerima belum tentu mendapatkan pesan yang
berurutan dimulai dari pesan 1, pesan 2, dan terakhir pesan 3. Bisa saja pesan
2 terlebih dulu diterima, menyusul pesan-pesan yang lain, atau berbagai
kemungkinan lainnya. Bahkan, dapat terjadi pesan yang dikirimkan tidak sampai
ke penerima karena kegagalan pengiriman paket data.
Tidak
demikian halnya dengan stream socket yang menggunakan TCP. Jenis ini
mengharuskan terjadinya koneksi terlebih dahulu, kemudian mengirimkan
paket-paket data secara berurutan, penerima juga dijamin akan menerima data
dengan urutan yang benar, dimulai dari data pertama yang dikirimkan hingga data
terakhir. TCP dapat menangani data yang hilang, rusak, terpecah, ataupun
terduplikasi.
Dari sekilas
perbedaan ini, kita dapat menarik kesimpulan bahwa aplikasi socket yang
menggunakan TCP memerlukan pertukaran data dua arah yang valid. Sedangkan,
aplikasi socket yang menggunakan UDP lebih memprioritaskan pada pengumpulan
data.
Karena itu
aplikasi socket dengan TCP sering diterapkan untuk aplikasi chat, transfer file,
ataupun transaksi-transaksi penting. Sedangkan aplikasi socket dengan UDP cocok
diterapkan untuk aplikasi monitoring jaringan, game online, dan
aplikasi-aplikasi broadcast.
Port
Salah satu
elemen penting yang digunakan dalam aplikasi socket adalah port. Port merupakan
sebuah koneksi data virtual yang digunakan aplikasi untuk bertukar data secara
langsung.
Terdapat
banyak port di dalam sebuah sistem komputer dengan fungsinya masing-masing.
Sebagai contoh, dalam mengirim e-mail digunakan service SMTP yang umumnya
menggunakan port 25. Sementara service POP3 untuk menerima e-mail menggunakan
port 110, port 80 digunakan untuk HTTP, port 443 digunakan untuk HTTPS, dan
seterusnya.
Nomor-nomor
port dikategorikan dalam tiga jenis sebagai berikut:
1.
Well-known ports.
Merupakan
port yang telah digunakan secara internal oleh sistem Windows, misalnya port
untuk koneksi Internet, service FTP, dan seterusnya. Port yang telah digunakan
ini adalah port 0 sampai dengan port 1023.
2.
Registered ports.
Port ini
dapat digunakan dalam aplikasi Anda, range-nya adalah port 1024 hingga port
49151, cukup banyak port yang tersedia yang bebas Anda pilih sehingga Anda
tidak perlu kuatir kekurangan port untuk aplikasi Anda.
3.
Dynamic/Private ports.
Dari port 49152
sampai dengan port 65535.
Winsock
Untuk
pemrograman aplikasi socket berbasis Windows, maka komponen API yang sering
digunakan adalah Winsock (Win-dows Socket API) yang mendukung interface standar
TCP/IP, yang merupakan protokol jaringan paling popular saat ini (contoh
protokol jaringan yang lain adalah NetBIOS, IPX dari Novell, AppleTalk dari
Apple, dan seterusnya).
Pengertian
TCP/IP (TCP over IP) mungkin dapat menjadi sedikit rancu jika diartikan TCP/IP
hanya mengizinkan pengiriman TCP (dan tidak UDP), padahal seperti yang telah
kita bahas, pengiriman socket dapat melalui TCP maupun UDP.
Pengertian
TCP/IP di sini sebenarnya digunakan untuk menunjukkan teknologi
jaringan/Internet, termasuk di dalamnya adalah UDP. Jika Anda menggunakan UDP,
dapat juga disebut sebagai UDP/IP (UDP over IP), tetapi umumnya istilah ini
jarang digunakan dan istilah TCP/IP telah mencakup, baik TCP maupun UDP.
Pada bahasa
pemrograman visual seperti Visual Basic/Delphi, Anda dapat menggunakan control
Winsock yang telah disediakan untuk mengembangkan aplikasi socket.
Walaupun
kita akan mencontohkan aplikasi socket dalam environment Windows, Anda tidak
perlu khawatir jika aplikasi socket yang menggunakan Winsock tidak dapat
berkomunikasi dengan aplikasi socket berbasis Unix/Linux, karena komunikasi
tetap dapat terjadi selama aplikasi tersebut menggunakan protokol jaringan yang
sama.
Kalau
demikian, untuk mencoba aplikasi socket, apakah mutlak diperlukan setidaknya
jaringan dengan minimal dua komputer yang saling terkoneksi? Bagi Anda yang
terpaksa hanya menggunakan satu komputer, dapat memanfaatkan alamat localhost
atau 127.0.0.1 yang mengizinkan dua aplikasi berjalan pada satu mesin komputer
dan berkomunikasi satu sama lain.
Aplikasi
Server
Untuk
membuat aplikasi socket yang sederhana, tidak diperlukan langkah-langkah yang
rumit. Kita akan mencoba membuat dua buah aplikasi, yang pertama adalah
aplikasi server yang akan menerima data, sedangkan aplikasi kedua adalah
aplikasi client yang mengirimkan data pada server. Baik aplikasi server dan
aplikasi client mendefi nisikan port yang sama sebagai jalur komunikasi.
Contoh
program dibuat dengan menggunakan Visual Basic 6. Konsep pemrograman yang
serupa juga dapat Anda implementasikan pada bahasa pemrograman lain seperti
Visual Basic.NET, Delphi, dan lain sebagainya.
Kita akan
memulainya dengan aplikasi server, tugas aplikasi server cukup sederhana, yaitu
hanya siap sedia menerima data yang masuk pada sebuah port. Control yang Anda
perlukan adalah control winsock bernama Winsock1 dan sebuah textbox bernama
Text1. Pada event Form_Load, tuliskan kode program di bawah
ini:
Private Sub
Form_Load()
With
Winsock1
.LocalPort =
1025
.Listen
End With
End Sub
Kode program
tersebut melakukan inisialisasi socket, socket memilih port 1025 pada komputer
server dan menunggu data yang masuk melalui port tersebut dengan perintah
Listen.
Selanjutnya
pada event Winsock1_ConnectionRequest, ketikkan kode program berikut:
Private Sub
Winsock1_ConnectionRequest(ByVal requestID As
Long)
If
Winsock1.State <> sckClosed Then Winsock1.Close
Winsock1.Accept
requestID
End Sub
Kode program
di atas berfungsi untuk menerima request koneksi. Selanjutnya pada event
Winsock1_DataArrival, ketikkan kode program berikut:
Private Sub
Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim strData
As String
Winsock1.GetData
strData
Text1.Text =
Text1.Text & strData
End Sub
Kode program
di atas berfungsi untuk mengambil data yang diterima oleh socket dan
menampilkannya pada Text1. Aplikasi server telah selesai!
Aplikasi
Client
Seperti
aplikasi server, Anda perlu menyiapkan control Winsock dan Text, ditambah
sebuah control Command Button yang dapat Anda namakan cmdKirim yang berfungsi
untuk mengirimkan data yang diketik pada Text1 ke aplikasi server.
Pada event
Form_Load, ketikkan kode program di bawah:
Private Sub
Form_Load()
With Winsock1
.RemoteHost
= “127.0.0.1”
.RemotePort
= 1025
.Connect
End With
End Sub
Kode program
di atas berfungsi untuk melakukan inisialisasi, tentukan IP
tujuan/server/remote dengan 127.0.0.1 seperti pada contoh jika Anda mencoba
aplikasi ini dengan menggunakan satu mesin komputer.
Jika Anda
mencobanya dengan menggunakan dua komputer dalam sebuah jaringan, isikan dengan
IP komputer yang berfungsi sebagai server.
Selanjutnya
pada cmdKirim, ketikkan kode program sebagai berikut:
Private Sub
cmdKirim_Click()
If
Winsock1.State = sckConnected Then
Winsock1.SendData
Text1.Text
End If
End Sub
Kode program
di atas akan mengirimkan pesan yang Anda ketik pada textbox Text1 pada aplikasi
server.
Selesailah
sudah aplikasi server dan client. Cukup mudah, bukan? Anda dapat melakukan uji
coba dengan menjalankan aplikasi server pada komputer yang berfungsi sebagai
server (ataupun komputer yang sama dengan aplikasi client jika Anda menggunakan
127.0.0.1 sebagai remote IP).
Jalankan
aplikasi client, dan ketik kata-kata yang Anda inginkan, lalu tekan Command
Button cmdKirim, maka aplikasi server akan menampilkan pesan yang Anda ketikkan
tersebut.
Dari program
sederhana ini, Anda dapat mengembangkannya menjadi aplikasi socket yang sesuai
dengan keperluan Anda, penggunaannya sangat luas dan bisa jadi sangat
bermanfaat, misalnya aplikasi instant messenger seperti Yahoo! Messenger
ataupun MSN Messenger yang merupakan aplikasi socket yang banyak digunakan.
Pengolahan
Data
Komunikasi
data antara server dan client di atas merupakan bentuk komunikasi satu arah
sederhana. Data yang dikirimkan dari client pun merupakan data mentah yang
tidak memerlukan pengolahan data lebih lanjut.
Anda dapat
membuat sendiri function dan rutin untuk mengolah data yang dikirim dan
diterima sesuai dengan kebutuhan aplikasi, karena data yang dikirimkan
antarmesin bisa jadi sangat bervariasi.
Misalnya
saja aplikasi server/client Anda memerlukan pertukaran data identitas mesin,
tanggal, jam, header pesan, isi pesan, dan lain sebagainya. Anda dapat
mengirimkannya dalam format tertentu, misalnya bentuk string dengan karakter
pemisah untuk membedakan masing-masing field.
Dalam komunikasi
data di dalam jaringan, Anda perlu mempertimbangkan besarnya data yang
lalu-lalang pada jaringan, baik dengan menggunakan TCP maupun UDP. Keduanya
harusdipersiapkan untuk mampu menangani data yang besar jika memang pengguna
aplikasi socket Anda sangat luas.
Pastinya
tidak terdapat masalah yang berarti jika Anda mencobanya dengan dua atau
beberapa komputer dalam sebuah jaringan lokal, tetapi coba bayangkan seberapa
besar total data yang harus dikirim dan diterima pada sebuah aplikasi game
online, misalnya.
Pada contoh
game online, sebuah server harus dipersiapkan untuk mampu melayani sedemikian
banyak client, dan jaringan yang digunakan bukan lagi jaringan lokal, tetapi
sudah merupakan jaringan Internet, di mana siapapun dapat menggunakan aplikasi
Anda selama ia memiliki koneksi Internet.
Mungkin Anda
bertanya, jika data yang keluar-masuk memerlukan pengolahan lebih lanjut,
mengapa tidak digunakan database, sehingga Anda tidak perlu pusing membuat
rutin atau modul untuk mengolah data yang dikirim/diterima melalui komunikasi
socket?
Pada
umumnya, aplikasi socket client/server memang menggunakan database pada sisi
server, tetapi jika aplikasi socket mengharuskan sisi client menggunakan
database tertentu, maka akan membatasi penggunaan aplikasi itu sendiri.
Selain itu,
kegunaan komunikasi socket adalah agar dapat berjalan lintas platform. Tidak
peduli operating system apa yang digunakan pengguna aplikasi, komunikasi socket
tetap berjalan selama digunakan protokol yang sama.