Programming
di Linux
Mata Kuliah: Pengantar Telematika
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
E-Book ini menjelaskan mengenai pembuatan aplikasi Client Server dengan menggunakan
bahasa pemrograman Python di Sistem Operasi Linux.
18 Agustus 2013
DAFTAR ISI
BAB 1 – Konsep Dasar Client Server.….…………………..…………………………………………….3
2
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
BAB 1
Konsep Dasar Client Server
Client Server adalah suatu arsitektur dimana sumber daya server menyediakan komputasi untuk banyak
komponen client.Client dapat mengakses satu server atau multiple server. Client dan server bisa
berjalan pada mesin yang sama atau berbeda, ditulis dalam berbagai bahasa dan menggunakan sistem
operasi yang berbeda.
Client melakukan suatu informasi atau mengirim perintah pada server. Server akan menerima
permintaan dan perintah client, kemudian server akan memproses permintaan tersebut dan
mengembalikan kepada client hasil pemrosesan yang sudah dilakukan. Data yang diminta oleh client
dapat diambil dari database pada sisi server yang sering disebut database server, seperi misalnya
MySQL, PostgreSQL, Oracle, atau SQL Server.
Client dan Server merupakan item proses (logika) terpisah yang bekerja sama pada suatu
jaringan komputer untuk mengerjakan suatu tugas
Service : Menyediakan layanan terpisah yang berbeda
Shared resource : Server dapat melayani beberapa client pada saat yang sama dan mengatur
pengaksesan resource
Asymmetrical Protocol : antara client dan server merupakan hubungan one-to-many. Client
memulai komunikasi dengan mengirim request ke server. Server menunggu permintaan dari
client. Kondisi tersebut juga memungkinkan komunikasi callback.
Transparency Location : proses server dapat ditempatkan pada mesin yang sama atau terpisah
dengan proses client. Client/server akan menyembunyikan lokasi server dari client.
Mix-and-match : tidak tergantung pada platform
Message-based-exchange : antara client dan server berkomunikasi dengan mekanisme
pertukaran message.
Encapsulation of service : message memberitahu server apa yang akan dikerjakan
Scalability : sistem C/S dapat dimekarkan baik vertikal maupun horizontal
Integrity : kode dan data server diatur secara terpusat, sedangkan pada client tetap pada
komputer tersendiri
3
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
BAB 2
Socket Programming
Socket adalah sebuah cara untuk berkomunikasi dengan program atau node lain menggunakan file
deskriptor. Di UNIX (dimana socket diciptakan) sering terdengar slogan: “everything is a file”, yang
ditujukan untuk berkomunikasi dengan program atau node lain semudah membaca dan menulis file
deskriptor. Tampilan antarmuka socket dan filenya pun mirip. Bila pada file dibuka dengan open(), maka
pada socket digunakan socket(). Pada file deskriptor yang menjadi tujuan adalah sebuah file, sedangkan
pada socket adalah komputer atau node lain. Ketika terhubung dengan socket(), maka antarmukanya
sama saja dengan sebuah file.
Penggunaan socket programming memungkinkan adanya komunikasi antara client dan server. Salah
satu contoh sederhana penggunaan socket programming adalah pembuatan program untuk chatting.
Program tersebut sebenarnya merupakan bentuk aplikasi berupa komunikasi antara client dan server.
Ketika seorang user (client) melakukan koneksi ke chat server, program akan membuka koneksi ke port
yang diberikan, sehingga server perlu membuka socket pada port tersebut dan “mendengarkan” koneksi
yang datang. Socket sendiri merupakan gabungan antara host-address dan port address. Dalam hal ini
socket digunakan untuk komunikasi antara client dan server.
Socket merupakan fasilitas IPC (Inter Proses Communication) untuk aplikasi jaringan. Agar suatu socket
dapat berkomunikasi dengan socket lainnya, maka socket perlu diberi suatu alamat unik sebagai
identifikasi. Alamat socket terdiri atas Alamat IP dan Nomer Port. Contoh alamat socket adalah
192.168.29.30: 3000, dimana nomor 3000 adalah nomor portnya. Alamat IP dapat menggunakan alamat
Jaringan Lokal (LAN) maupun alamat internet. Jadi socket dapat digunakan untuk IPC pada LAN maupun
Internet.
4
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
BAB 3
Bahasa Pemrograman: Python
Python merupakan salah satu dari sekian banyak bahasa pemrograman yang ada, diantaranya ada Java,
C/C++, Pascal, dan lain sebagainya. Python digolongkan ke dalam bahasa pemrograman tingkat tinggi,
dimana programmer (pembuat program) tidak perlu bersusah payah dalam membuat program
dibandingkan dengan menggunakan bahasa pemrograman tingkat rendah.
Salah satu kelebihan Python adalah bahasa pemrograman ini dapat dijalankan di berbagai sistem operasi
(Semisal Linux, Windows, dan Mac OS). Program yang dibuat dengan bahasa ini juga dapat dijalankan
langsung di berbagai sistem operasi tersebut. Sehingga tidak menyulitkan peran programmer untuk
membuat suatu program yang dapat dijalankan secara multi-platform.
Kelebihan lain yang dimiliki oleh bahasa pemrograman ini adalah penulisan kode-kode program yang
digunakan lebih ringkas dibandingkan bahasa pemrograman lainnya, sebut saja bahasa C/C++ atau Java.
5
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
BAB 4
Konsep Dasar Socket Programming Menggunakan
Bahasa Python
Penggunaan dasar socket
Python hanya menggunakan dua domain komunikasi, yaitu: UNIX (AF_UNIX) dan Internet (AF_INET)
domain. Pengalamatan pada UNIX domain direpresentasikan sebagai string, dinamakan dalam lokal
path: contoh /tmp/sock. Sedangkan pengalamatan Internet domain direpresentasikan sebagai
tuple(host,port), dimana host merupakan string yang merepresentasikan nama host internet yang sah
(hostname), misalnya : darkstar.drslump.net atau berupa IP address dalam notasi dotted decimal,
misalnya : 192.168.1.1. Dan port merupakan nomor port yang sah antara 1 sampai 65535. Tetapi dalam
keluarga UNIX penggunaan port di bawah 1024 memerlukan akses root privileges.
Sebelum menggunakan modul socket dalam Python, maka modul socket harus terlebih dahulu diimport.
Berikut contohnya :
#!/usr/bin/python
import socket
atau
#!/usr/bin/python
atau
#!/usr/bin/python
# Mengimport konstanta
6
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
Socket dibuat melalui pemanggilan socket(family, type[, Proto]). Untuk lebih jelasnya dapat dilihat pada
tabel berikut ini:
Family Penjelasan
Type Penjelasan
SOCK RDM -
SOCK SEQPACKET -
Untuk proto bersifat opsional dan biasanya bernilai 0. Untuk membuat socket stream (TCP) internet
domain digunakan statement berikut:
atau
sock.bind(('localhost',12345))
atau
sock.bind(('192.168.1.1',12345))
Perintah di atas akan membuat file pipe /tmp/sock yang dapat digunakan untuk berkomunikasi antara
server dan client.
Statement di atas akan mengembalikan sebuah tuple (conn, address) dimana conn adalah objek socket
baru yang berguna untuk mengirim dan menerima data dari koneksi, dan address merupakan alamat
dari client.
8
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
Mengirim Data ke Koneksi (Sending)
Menerima koneksi tidak akan berarti tanpa digunakan untuk mengirim dan menerima data. Oleh karena
itu digunakan method send(string) untuk socket stream (TCP) dan sendto(string,address) untuk socket
datagram (UDP). Berikut ini penggunaannya untuk socket stream.
Statement di atas akan mengembalikan data yang dikirimkan oleh client. Sedangkan untuk socket
datagram :
Statement di atas akan mengembalikan dua buah field yaitu data, address.
9
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
Bab 5
Program PSP (Python Socket Programming) – Client &
Server
Yang Perlu Dipersiapkan
Simpan source code server dan client yang disertakan dalam ebook ini dengan nama psp-server.py dan
psp-client.py . Ekstensi "py" tersebut menandakan bahwa source code tersebut merupakan source code
bahasa pemrograman Python.
Sebelum menjalankan kedua program tersebut, pastikan Anda telah mengikuti step-step berikut ini.
1. Aktifkan XAMPP, terutama MySQL Servernya. Untuk mengaktifkan XAMPP, caranya sebagai
berikut:
a. Pastikan Anda telah mendownload XAMPP untuk Linux di situs berikut
http://sourceforge.net/projects/xampp/files/XAMPP%20Linux/1.7.7/xampp-linux-
1.7.7.tar.gz/download
b. Buka terminal, ketik perintah sudo su di terminal
sudo su
c. Setelah itu ekstrak file hasil download tersebut ke direktori /opt
tar -zxvf xampp-linux-1.7.7.tar.gz -C /opt
d. Kemudian jalankan servicenya
sudo /opt/lampp/lampp start
Jika sudah, maka program PSP Client & Server sudah siap untuk dijalankan.
Cara Penggunaan
Ubah hak akses program server dan client tersebut.
chmod +x psp-server.py
chmod +x psp-client.py
10
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
Jalankan terlebih dahulu program server psp-server.py
./psp-server.py
Pilih Activate Server untuk mengaktifkan server. Kemudian masukkan port yang akan digunakan.
Misalnya 12345.
11
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
Sekarang jalankan program client psp-client.py
./psp-client.py
12
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
Login untuk masuk ke dalam program dengan username yang sudah didaftarkan sebelumnya.
Sign up untuk mendaftarkan pengguna terlebih dahulu.
Exit untuk keluar dari program.
Pengguna diwajibkan untuk memilih menu no 2 terlebih dahulu untuk mendaftarkan username
pengguna. Pilih sign up. Kemudian masukkan username serta password.
Apabila terdapat pesan "Success" maka proses pendaftaran telah berhasil dilakukan. Langkah
selanjutnya, yaitu memilih menu no 1 “login”. Masukkan username serta password yang telah dibuat
tadi.
13
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
Masukkan server address. Server address yaitu alamat IP server, atau apabila server dan client
dijalankan di komputer yang sama, maka pengguna dapat mengisi server address dengan "localhost".
Masukkan port yang digunakan, karena tadi port Server yang dibuka yaitu 12345, maka samakan
portnya, yaitu isi dengan "12345".
Masukkan pesan yang akan dikirim ke server. Misalnya "Hai server kenalan dong"
Kemudian program client akan meneruskan pesan tersebut ke program server. Setelah itu program
server menerima pesan tersebut. Kemudian dikirimkan balik oleh server ke client.
14
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
Sehingga pesan yang tadinya ada di server menjadi kosong kembali.
Client menerima kembali pesan tersebut. Setelah itu socket yang ada di Client pun ditutup.
Program Client selanjutnya menanyakan apakah mau mengirim pesan lagi. Tekan y apabila mau
mengirim pesan lagi, jika tidak maka tekan n.
15
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
16
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
Fitur-Fitur
Melalui program psp-server.py , pengguna dapat melihat client yang sudah terdaftar, yaitu dengan
memilih menu no 2 “List Client”.
17
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
Setelah itu terdapat pertanyaan, apakah pengguna ingin mengganti nama client atau menghapus client
yang telah terdaftar.
18
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
Server juga dapat melihat log percakapan yang telah terjadi, dengan memilih menu no 3 “See Log”.
19
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
Bab 6
Source Code Program
PSP-Server.py
20
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
21
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
22
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
23
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
PSP-Client.py
24
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
25
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
26
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
Bab 7
Penjelasan Source Code Program
Server
#!/usr/bin/python
Baris di atas digunakan sebagai penanda bahwa bahasa pemrograman yang digunakan yaitu Python.
Lokasi python interpreter yaitu ada di folder /usr/bin/python
import socket
import sys
import MySQLdb
from time import gmtime, strftime, localtime
Perintah import di atas berfungsi untuk memanggil fungsi dari sebuah modul. Bentuk umumnya yaitu
import <nama_modul> . Modul yang digunakan yaitu socket, sys, time, MySQLdb.
Yang membedakan antara perintah import dan from import di atas adalah pada import <nama_modul>
digunakan untuk memanggil seluruh fungsi yang ada pada modul tersebut, sedangkan pada from
<nama_modul> import hanya memanggil beberapa fungsi yang ada pada modul tersebut.
Apabila dilihat dari efisiensi program, tentu saja penggunaan from <nama_modul> import lebih efisien.
Karena hanya memanggil beberapa fungsi saja yang diperlukan oleh program.
if __name__ == '__main__':
colorred = "\033[01;31m{0}\033[00m"
colorgrn = "\033[1;32m{0}\033[00m"
colorblu = "\033[1;34m{0}\033[00m"
art()
print colorgrn.format("1. Activate server")
print colorgrn.format("2. List client")
print colorgrn.format("3. See log")
print colorgrn.format("4. Exit")
27
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
option = input("Input your choice [1-4] ? ")
if option == 1:
print colorred.format("Activate Server")
port = input("Port : ")
programserver()
elif option == 2:
print colorred.format("\nList Client")
listclient()
elif option == 3:
print colorred.format("\nSee Log")
seelog()
elif option == 4:
print colorblu.format("Byeeeee")
sys.exit(0)
else:
print "Tidak ada pilihan"
colorred = "\033[01;31m{0}\033[00m"
colorgrn = "\033[1;32m{0}\033[00m"
colorblu = "\033[1;34m{0}\033[00m"
Untuk membuat program menjadi sedikit lebih warna. Colorred untuk warna merah, colorgrn untuk
warna hijau, colorblu untuk warna biru.
art()
Untuk memanggil fungsi art yang telah di definisikan sebelumnya di dalam program (perintah def art():)
Dimana fungsi def art() untuk mencetak tulisan di bawah ini dengan warna biru dan merah.
PSP-Server
28
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
Disini terdapat menu interaktif, sehingga pengguna dapat memilih salah satu dari 4 menu yang ada di
atas. Dengan pertanyaan “Input your choice ? “ dan apa yang diinput oleh pengguna nanti dimasukkan
ke dalam variabel option.
if option == 1:
print colorred.format("Activate Server")
port = input("Port : ")
programserver()
elif option == 2:
print colorred.format("\nList Client")
listclient()
elif option == 3:
print colorred.format("\nSee Log")
seelog()
elif option == 4:
print colorblu.format("Byeeeee")
sys.exit(0)
else:
print colorred.format("Tidak ada pilihan")
Jika pengguna memilih angka 1, maka program akan menjalankan sub perintah di bawahnya. Begitu juga
apabila memilih angka 2, 3, dan 4.
Fungsi-fungsi yang digunakan dalam python didefinisikan dengan menggunakan perintah def.
Activate Server
sock.listen(5)
Server akan mendengarkan (listen) untuk setiap komunikasi yang akan datang. Angka 5 itu menunjukkan
jumlah Client yang dapat ditangani oleh Server.
while True:
29
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
print >>sys.stderr, '\nWaiting for a connection'
connection, client_address = sock.accept()
try:
print >>sys.stderr, 'connection from', client_address
while True:
data = connection.recv(100)
print >>sys.stderr, 'received "%s"' % data
Server menerima data dari Client. Angka 100 dalam connection.recv(100) itu menunjukkan jumlah
karakter yang mampu ditangani dalam setiap komunikasi.
Pencatatan waktu berdasarkan waktu komputer yang bersangkutan (Server) dengan format hari,
tanggal, jam.
db = MySQLdb.connect(unix_socket="/opt/lampp/var/mysql/mysql.sock",user="root",
passwd="root",db="TESTDB")
username = root
password = root
cursor = db.cursor()
sql = "INSERT INTO log(time, message) VALUES ('%s', '%s')" % (timelog, data)
Mempersiapkan kueri SQL, untuk memasukkan (insert) record ke dalam database. Dalam record
tersebut terdapat dua kolom, yaitu time dan message.
try:
cursor.execute(sql)
db.commit()
db.close()
if data:
print >>sys.stderr, 'sending data back to the client'
connection.sendall(data)
else:
print >>sys.stderr, 'no more data from', client_address
break
Data yang diterima oleh Client dikirimkan kembali ke Client tersebut. Jika Server sudah mengirimkan
semua data, maka kemudian memberitahukan bahwa sudah tidak ada data lagi.
finally:
connection.close()
Jika sudah tidak ada komunikasi lagi, maka server akan menutup koneksinya.
List Client
db = MySQLdb.connect(unix_socket="/opt/lampp/var/mysql/mysql.sock",user="root",
passwd="root",db="TESTDB")
username = root
password = root
cursor = db.cursor()
31
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
print colorgrn.format("Id Client")
try:
cursor.execute(sql)
results = cursor.fetchall()
for row in results:
nor = row[0]
uname = row[1]
print colorgrn.format("%d. %s" % (nor, uname))
except:
print "Error: unable to fecth data"
Mengeksekusi queri SQL, kemudian mengambil semua baris dalam tabel (tabel user). Setelah itu diambil
2 bagian, yaitu kolom no dan username. Apabila terdapat masalah, maka program akan menampilkan
pesan error.
Meminta input dari pengguna, apakah ingin mengedit Client yang ada atau tidak.
if edit == 'y':
print colorred.format("\nEdit")
print colorgrn.format("1. rename")
print colorgrn.format("2. remove")
edit2 = input("Your choice ? ")
Jika pengguna memasukkan huruf 'y', maka pengguna akan ditanyakan lagi apakah mau melakukan
rename atau remove ke Client tersebut.
if edit2 == 1:
nmbclient = input("Id client to rename (see list client) ? ")
newclient = raw_input("New client name ? ")
sql = "UPDATE user SET username = '%s' WHERE no = '%s'" % (newclient, nmbclient)
try:
cursor.execute(sql)
db.commit()
print colorblu.format("Success")
except:
db.rollback()
32
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
Opsi ini digunakan untuk me-rename Client. Program akan menanyakan Id client yang ingin direname,
lalu setelah itu ditanyakan pula nama baru dari Client yang akan diganti namanya tersebut. Untuk
mengganti nama Client, digunakanlah perintah UPDATE dalam SQL. Apabila berhasil, maka database
akan melakukan commit. Namun, apabila gagal, maka database akan melakukan rollback.
elif edit2 == 2:
nmb2client = input("Id client to remove (see list client) ? ")
sql = "DELETE FROM user WHERE no = '%s'" % (nmb2client) # Prepare SQL query to
DELETE required records
try:
cursor.execute(sql)
db.commit()
print colorblu.format("Success")
except:
db.rollback()
Opsi ini digunakan untuk menghapus (remove) Client. Program akan menanyakan Id Client yang akan
dihapus. Untuk menghapus Client, yaitu menggunakan perintah DELETE dalam SQL. Apabila berhasil,
maka database akan melakukan commit. Namun, apabila gagal, maka database akan melakukan
rollback.
else :
print colorblu.format("Okay. No edit.")
Opsi ini digunakan apabila pengguna tidak ingin melakukan perubahan (edit) terhadap Client.
db.close()
See Log
db = MySQLdb.connect(unix_socket="/opt/lampp/var/mysql/mysql.sock",user="root",
passwd="root",db="TESTDB")
username = root
password = root
cursor = db.cursor()
33
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
Mempersiapkan objek cursor dengan menggunakan method cursor()
try:
cursor.execute(sql)
results = cursor.fetchall()
for row in results:
nor = row[0]
timer = row[1]
messager = row[2]
Mengambil semua baris dalam tabel. Kemudian diambil 3 bagian, yaitu untuk nomor, waktu, dan pesan.
except:
print "Error: unable to fecth data"
Apabila terjadi error, maka akan mencetak pesan yang diapit oleh tanda kutip di atas.
db.close()
34
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
Client
#!/usr/bin/python
Baris di atas digunakan sebagai penanda bahwa bahasa pemrograman yang digunakan yaitu Python.
Lokasi python interpreter yaitu ada di folder /usr/bin/python
import socket
import sys
import MySQLdb
Perintah import di atas berfungsi untuk memanggil fungsi dari sebuah modul. Bentuk umumnya yaitu
import <nama_modul> . Modul yang digunakan yaitu socket, sys, MySQLdb.
Dalam program yang berfungsi sebagai client ini terdapat 4 fungsi, yaitu main, programclient, login, dan
signup.
Main Program
if __name__ == '__main__':
Main adalah baris perintah yang pertama kali diproses oleh program.
colorred = "\033[01;31m{0}\033[00m"
colorgrn = "\033[1;32m{0}\033[00m"
colorblu = "\033[1;34m{0}\033[00m"
Untuk membuat program menjadi sedikit lebih warna, digunakanlah variabel colorred untuk warna
merah, colorgrn untuk warna hijau, colorblu untuk warna biru.
art()
Disini terdapat menu interaktif, sehingga pengguna dapat memilih salah satu dari 3 menu yang ada di
atas. Dengan pertanyaan “Input your choice ? “ dan apa yang diinput oleh pengguna nanti dimasukkan
ke dalam variabel option.
if option == 1:
print colorred.format("\nLogin")
35
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
username = raw_input("Username : ")
password = raw_input("Password : ")
login()
again = 'y'
print "\n"
target = raw_input("Enter Server Address : ")
port = input("Port : ")
#destination = raw_input("Enter IP destination : ")
while again!='n':
message = raw_input("Send your message : ")
programclient()
again = raw_input("Do you want to repeat again (y/n) : ")
print "\n"
elif option == 2:
print colorred.format("\nSign Up")
usern = raw_input("Username : ")
passw = raw_input("Password : ")
signup()
elif option == 3:
sys.exit(0)
Jika pengguna memilih angka 1, maka program akan menjalankan sub perintah di bawahnya. Begitu juga
apabila memilih angka 2 dan 3. Di dalam opsi 1 terdapat 2 fungsi di dalamnya, yaitu login dan
programclient. Untuk dapat menggunakan layanan dari program, pengguna diwajibkan untuk login
terlebih dahulu setelah itu baru dapat menggunakan layanan program tersebut.
Program Client
def programclient():
36
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
Menghubungkan soket ke port dimana server saat itu sedang mendengarkan (listening)
try:
print >>sys.stderr, 'sending "%s"' % message
sock.sendall(message)
Setelah koneksi dibuat, data dapat dikirimkan melalui socket dengan perintah sendall() dan diterima
dengan recv(), seperti di server.
finally:
print >>sys.stderr, 'closing socket'
sock.close()
Art
def art():
print colorblu.format(" _____ _____ _____ _____ _ _ _ ")
print colorblu.format("| _ | __| _ |___| | |_|___ ___| |_ ")
print colorblu.format("| __|__ | __|___| --| | | -_| | _|")
print colorblu.format("|__| |_____|__| |_____|_|_|___|_|_|_| ")
Fungsi art di atas adalah digunakan untuk mencetak kata-kata yang ada di dalam tanda petik. Colorblu
untuk format warna berwarna biru, sedangkan colorred untuk format warna berwarna merah.
Login
def login():
Fungsi login berguna untuk memastikan pengguna telah menjadi anggota atau mendaftar (sign up)
terlebih dahulu. Sehingga tidak sembarangan pengguna dapat menggunakan layanan tersebut.
37
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
db = MySQLdb.connect(unix_socket="/opt/lampp/var/mysql/mysql.sock",user="root",
passwd="root",db="TESTDB")
username = root
password = root
cursor = db.cursor()
try:
cursor.execute(sql)
results = cursor.fetchall()
for row in results:
uname = row[1]
pword = row[2]
if (username == uname) & (password == pword):
print "Congrats, you are a member."
break
else:
print "Hey, you are not a member."
except:
print "Error: unable to fecth data"
Mengeksekusi queri SQL, kemudian mengambil semua baris dalam tabel (tabel user). Setelah itu diambil
2 bagian, yaitu kolom username dan password. Lalu mencocokkan antara username dan password yang
dimasukkan oleh pengguna. Apabila terdapat masalah, maka program akan menampilkan pesan error.
db.close()
Sign Up
def signup():
38
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
Fungsi signup digunakan untuk mendaftarkan pengguna agar dapat menggunakan layanan dari program
client ini.
db = MySQLdb.connect(unix_socket="/opt/lampp/var/mysql/mysql.sock",user="root",
passwd="root",db="TESTDB")
username = root
password = root
cursor = db.cursor()
sql = "INSERT INTO user(username, password) VALUES ('%s', '%s')" % (usern, passw)
Mempersiapkan kueri SQL, untuk memasukkan (insert) record ke dalam database. Dalam record
tersebut terdapat dua kolom, yaitu username dan password.
try:
cursor.execute(sql)
db.commit()
print colorblu.format("Success! =)")
except:
db.rollback()
Mengeksekusi kueri SQL. Setelah itu melakukan commit ke dalam database, dan mencetak kata
“Success” dengan warna biru. Apabila terdapat masalah, maka database akan melakukan rollback.
db.close()
39
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
BAB 8
Bonus: Client Menggunakan Bahasa Pemrograman Lain
(Bahasa C)
Antara server dan client, untuk menghubungkannya sebenarnya tidak harus dibuat menggunakan
bahasa pemrograman yang sama. Dalam contoh kali ini, penulis akan mempraktikkan hal tersebut.
Client dibuat dengan bahasa pemrograman yang berbeda. Bahasa pemrograman yang digunakan yaitu
bahasa C.
./client
40
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
Program memberitahukan bahwa program tersebut harus dijalankan dengan memberitahukan terlebih
dahulu hostname (alamat server) dan port yang digunakan. Sebagai contoh alamat servernya yaitu
localhost dan portnya 12345. Maka perintahnya menjadi seperti berikut
41
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)
Berikut source codenya (client.c) :
42
Dhita Angreny (11110940) – Mahisa Ajy Kusuma (14110180) – Voni (18110409)