Kalkulator Sederhana Client-Server

Kita telah mencoba operasi aritmetika sederhana dengan dan tanpa fungsi. Kita juga telah mencoba aplikasi sederhana client-server yang mengirimkan sebuah pesan sederhana. Bagaimana jika operasi aritmetika ini dilakukan dengan arsitektur client-server? Kita akan menggabungkan konsep dasar dari dua contoh yang telah kita coba tentang arsitektur client-server sederhana dan fungsi. Mari kita lihat.

Kita akan membuat sebuah perhitungan aritmetika sederhana (kita coba penjumlahan saja) seperti yang dijelaskan di tulisan sebelumnya. Namun, akan ada sedikit modifikasi yaitu operasi ini dilakukan di arsitektur client-server. Client akan mengirim dua operand dan server akan memproses dan mengirim hasil perhitungan ke client.

Langkah-langkahnya secara ringkas adalah sebagai berikut:

  1. Client mengirim dua operand
  2. Server menerima dua operand
  3. Server melakukan parsing dua operand ini
  4. Server melakukan perhitungan dan mengirim hasilnya ke client

Kita mulai dari client terlebih dulu. Agar input dua operand ini bersifat dinamis, maka kita akan memanfaatkan teknik mendapatkan argumen value di Python. Selanjutnya, client akan mengirim dua operand yang masih direpresentasikan dalam satu string ini ke server (perhatikan bahwa di sini dua operand masih digabung menjadi satu string, belum dipisah)

#!/usr/bin/env python
 
# mengimpor modul socket dan sys
import socket
import sys
 
# mendapatkan semua operand
operand = ' '.join(sys.argv[1:])
 
# menentukan alamat server
server_address = ('localhost', 5000)
 
# ukuran buffer ketika menerima pesan
SIZE = 1024
 
# membuat socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 
# koneksi ke server
s.connect(server_address)
 
# mengirim operand ke server
s.send(operand)
 
# menerima hasil penjumlahan dari server
result = s.recv(SIZE)
 
# mencetak hasil penjumlahan dari server
print result
 
# menutup socket
s.close()

Operand yang dikirimkan ke server masih seperti ini: “2 3″. Sehingga, server harus memisahkannya (split) baru bisa dioperasikan. Proses mengolah atau memanipulasi data sebelum diproses lebih lanjut biasa disebut dengan parsing. Dalam contoh ini, parsing dilakukan untuk memisahkan dua operand yang masih berupa satu string “2 3″  menjadi “2″ dan “3″. Python menyediakan fungsi split yang sangat memudahkan kita melakukan pekerjaan ini. Mari kita mulai kode untuk server.

#!/usr/bin/env python
 
# mengimpor modul socket
import socket
 
# menentukan alamat server
server_address = ('localhost', 5000)
 
# ukuran buffer ketika menerima pesan
SIZE = 1024
 
# membuat objek socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 
# bind ke alamat server
s.bind(server_address)
 
# mendengarkan koneksi dari client
s.listen(5)
 
# siap menerima pesan terus-menerus dari client
while 1:
	# menerima koneksi dari client
	client, client_address = s.accept()
 
	# menerima pesan dari client
	message = client.recv(SIZE)
 
	# jika tidak ada pesan, keluar dari while
	if not message:
		break
 
	# parsing operand
	operand = message.split()
	operand1 = float(operand[0])
	operand2 = float(operand[1])
 
	# operasi penjumlahan
	result = operand1 + operand2
 
	# mengirimkan hasil penjumlahan ke client
	client.send(str(result))
 
# menutup socket
s.close()

Pesan dari client di-split dan return value dari proses split ini berupa list. By default, jika tidak diberikan input eksplisit, split dilakukan berdasarkan tanda spasi. Sehingga, operand1 dan operand2 bisa didapatkan dari return value split yang berupa list ini. Setelah itu, hasil penjumlahan dikonversi ke string agar bisa dikirim ke client (fungsi send dan recv hanya menerima string). Silakan langsung dicoba saja :D

 

December 24, 2011

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">