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 mendefinisikan 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.
No comments:
Post a Comment