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:
- Client mengirim dua operand
- Server menerima dua operand
- Server melakukan parsing dua operand ini
- 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
December 24, 2011