Studiawan
Studiawan
Oke, mari kita masuk ke acara inti. Kita akan membuat sebuah program client-server sederhana di
Python. Pemrograman semacam ini biasanya disebut dengan pemrograman socket. Jadi nanti kita akan
menggunakan modul Python yang bernama socket. Sebuah modul di Python bisa di-load pada program
kita dengan menggunakan perintah import. Jika lupa beberapa istilah pemrograman jaringan, client, atau
server, silakan baca kembali tulisan sebelumnya. Sebelum melanjutkan membaca, atur posisi duduk
Anda dulu, buat senyaman mungkin :D. Lalu bagaimana contoh programnya?
Ada sebuah video menarik tentang bagaimana sebenarnya jaringan komputer bekerja. Sepertinya
pemahaman tentang jaringan ini akan mempermudah kita dalam memprogram nantinya. Silakan dicek
videonya di YouTube. Jadi YouTube bisa buat belajar juga lho, tidak cuma untuk melihat Shinta & Jojo,
Nurman Kamaru, atau Ayu Ting Ting :P.
Oke, sebelum memprogram, kita harus tahu alur ceritanya dulu bukan? Begini ceritanya. Client akan
mengirimkan sebuah pesan dengan tipe data string kepada server. Kemudian server akan menerimanya,
kemudian mengirimkannya kembali ke client. Perhatikan bahwa di sini ada tiga proses utama: client
mengirim, server menerima, dan server mengirim kembali pesan.
Mari kita mulai melihat proses utama dari sisi client terlebih dulu.
#!/usr/bin/env python
# menutup socket
s.close()
Mari kita lihat satu per satu bagian program ini. Sebelumnya, ada catatan menarik tentang notasi #! di
baris pertama program ini. Silakan disimak lebih lanjut di halaman Wikipedia ini. Tahap pertama adalah
mengimpor modul socket. Modul ini digunakan untuk memanipulasi berbagai hal yang berkaitan dengan
socket.
Selanjutnya, adalah inisialisasi dua variabel yaitu alamat server (server_address) dan ukuran buffer
(SIZE). Perhatikan bahwa alamat server dibuat dengan tipe data tuple.
Elemen pertama variabel server_address menunjukkan alamat server dengan tipe data string, sedangkan
elemen kedua adalah port yang digunakan pada server dengan tipe data integer. localhost menunjukkan
bahwa server berada di komputer yang sama dengan client. Jika alamat ini dikosongi seperti ini: , maka
artinya sama dengan localhost. Nomor port dipilih sesuai dengan nomor port yang kosong di komputer
Anda. Ukuran buffer mempunyai satuan byte. Anda bisa mengubahnya sesuai dengan kebutuhan. Bisa
mulai dari 256, 512, 1024, 2048, dan seterusnya asalkan masih dalam kelipatan dua.
Proses selanjutnya adalah membuat objek socket. Ini adalah proses pertama yang merupakan bagian
proses utama yang terjadi di sisi client.
AF_INET adalah keluarga socket untuk komunikasi antara client dan server yang bisa berada di host yang
sama atau berbeda. AF_INET hanya mendukung IPv4. Parameter kedua adalah SOCK_STREAM yang
artinya adalah program ini menggunakan protokol TCP bukan UDP. Jika menggunakan UDP, maka
parameternya adalah SOCK_DGRAM. Dokumentasi lengkap tentang socket bisa dilihat di sini. Di sisi
client, s disebut dengan socket client.
Koneksi ke server dilakukan sesuai dengan alamat dan port yang telah didefinisikan sebelumnya.
Perhatikan bahwa ini adalah proses kedua dari proses utama yang terjadi di sisi client. Setelah itu, client
mengirim pesan ke server.
Perhatikan juga bahwa ini adalah proses ketiga dari bagian proses utama pada client. Sintaks Python
memang dirancang untuk mudah sekali dimengerti. Misalnya sintaks mengirim adalah send, sedangkan
menerima sintaksnya adalah recv. Tidak ada alasan untuk susah mengerti sintaks Python bukan? :D.
Pesan yang diterima dari server disimpan di variabel message untuk selanjutnya dicetak.
# menutup socket
s.close()
Sampai di sini ada pertanyaan? Silakan post komentar atau mengirim ke email saya atau boleh juga
ditanyakan di kelas :D.
Kita lanjutkan ke sisi server. Sedikit berbeda dengan client, program dari sisi server harus melakukan
bind, listen, dan accept. Secara umum, proses utama yang terjadi di sisi server adalah sebagai berikut
Kita lihat dulu contoh programnya, baru kita cek satu per satu bagian programnya.
#!/usr/bin/env python
# menutup socket
s.close()
Di sisi server ini, program diawali dengan cara yang sama seperti di sisi client. Mulai dari impor modul
socket, menentukan alamat server, menentukan ukuran buffer, dan membuat objek socket. Kita langsung
ke bagian yang berbeda. Pertama adalah proses bind ke alamat dan port yang telah ditentukan
Istilah bind di sini bisa diartikan sebagai pengaturan alamat dan port server. Jadi, alamat dan port yang
telah dideklarasikan tersebut, ditempelkan pada objek socket server. Di sisi server, s disebut dengan
socket server. Langkah selanjutnya adalah mendengarkan koneksi dari client.
Terdapat satu parameter pada listen yang biasa disebut dengan backlog yang artinya adalah jumlah
maksimum antrian koneksi. Karena di sini kita masih mencoba contoh yang sederhana, jadi kita set
jumlah antriannya satu saja. Berikutnya adalah menerima koneksi dari client.
Return value dari accept ada dua yaitu objek socket client (ditunjukkan dengan variabel client) dan alamat
client (variabel client_address). Jadi di sisi server, socket server ditunjukkan dengan variabel s dan
socket client ditunjukkan oleh variabel client. Ingat-ingat konsep ini karena akan kita gunakan pada bagian
berikutnya :D.
Berikutnya adalah server menggunakan infinite loop untuk menerima pesan dari client. Kemudian server
mengirimkan pesan kembali ke client.
Jika tidak ada lagi pesan yang diterima, maka keluar dari looping dan socket server ditutup.
# menutup socket
s.close()