Socket pada sistem client server
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