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.
Tidak ada komentar:
Posting Komentar