Selasa, 18 Februari 2014

Contoh Socket Programming bahasa Python : Mengirim data ke server

Setelah pada pos sebelumnya kita mencoba mendapatkan tanggal server dengan bahasa C dan Java, kali ini kita akan mencobanya dalam bahasa Python. Namun kali ini kita tidak menerima data tanggal. Kita sebagai Client akan mengirimkan data pada Server.
Sesuai dengan standar prosedur, siapkan text editor terlebih dahulu.

Berbeda dengan bahasa Java dan C, kita mengeset Port number dengan sebuah file lain yang diberi nama config.py berikut ini kodenya
# config.py
PORT=2014 
source : http://pythonadventures.wordpress.com/2013/07/06/a-basic-socket-client-server-example/

Ketik kode di atas, lalu simpan sebagai config.py
Kemudian ketikkan kode berikut untuk membuat server
#!/usr/bin/env python # server.py import socket import select import config as cfg import Queue from threading import Thread from time import sleep from random import randint import sys class ProcessThread(Thread): def __init__(self): super(ProcessThread, self).__init__() self.running = True self.q = Queue.Queue() def add(self, data): self.q.put(data) def stop(self): self.running = False def run(self): q = self.q while self.running: try: # block for 1 second only: value = q.get(block=True, timeout=1) process(value) except Queue.Empty: sys.stdout.write('.') sys.stdout.flush() # if not q.empty(): print "Elements left in the queue:" while not q.empty(): print q.get() t = ProcessThread() t.start() def process(value): """ Implement this. Do something useful with the received data. """ print value sleep(randint(1,9)) # emulating processing time def main(): s = socket.socket() # Create a socket object host = socket.gethostname() # Get local machine name port = cfg.PORT # Reserve a port for your service. s.bind((host, port)) # Bind to the port print "Listening on port {p}...".format(p=port) s.listen(5) # Now wait for client connection. while True: try: client, addr = s.accept() ready = select.select([client,],[], [],2) if ready[0]: data = client.recv(4096) #print data t.add(data) except KeyboardInterrupt: print print "Stop." break except socket.error, msg: print "Socket error! %s" % msg break # cleanup() def cleanup(): t.stop() t.join() ######################################################### if __name__ == "__main__": main()
source : http://pythonadventures.wordpress.com/2013/07/06/a-basic-socket-client-server-example/

Simpan file dengan format .py, admin menyimpan dengan nama listenserver.py
Selanjutnya ketikkan lagi kode berikut untuk membuat client.
#!/usr/bin/env python
# client.py
import config as cfg
import sys
import socket
def main(elems):
    try:
        for e in elems:
            client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            host = socket.gethostname()
            client.connect((host, cfg.PORT))
            client.send(e)
            client.shutdown(socket.SHUT_RDWR)
            client.close()
    except Exception as msg:
        print msg
#########################################################
if __name__ == "__main__":
    main(sys.argv[1:])
source : http://pythonadventures.wordpress.com/2013/07/06/a-basic-socket-client-server-example/
Setelah selesai buka terminal, ubah direktori ke tempat file server,client,dan config berada. Gunakan perintah 
cd lokasi

Masukan perintah 
python nama_file_server.py
nama file yang admin gunakan listenserver.py berikut ini gambarnya

Akan muncul tulisan listening dan karakter "." yang bertambah terus. Hal ini berarti server kita telah berjalan dan menunggu informasi dari client.
Buka jendela terminal baru, ubah direktori seperti langkah di atas, kemudian masukan perintah
python nama_file_client.py data1 data2 data3 ...
Nama file yang admin gunakan yaitu listenclient. Data dapat berupa huruf atau angka dengan urutan sembarang. berikut ini gambarnya
Data yang kita kirim melalui client akan dimunculkan satu per satu di jendela terminal server dengan urutan sesuai yang kita ketikkan pada jendela terminal client. Selamat anda berhasil :D

sumber : http://pythonadventures.wordpress.com/2013/07/06/a-basic-socket-client-server-example/








Tidak ada komentar:

Posting Komentar